スクロールビュー
制約付きのUIScrollViewがありますleft: 0, top: 0, right: 0, bottom: 0
内部スクロールビュー
このUIScrollView
は、制約付きのUIImageView
ですleft: 0, top: 0, right: 0, height: 200
この下に、制約付きUITextView
がありますleft: 0, top: 0, right: 0, bottom: 0
これは、UITextView
がその内容に関してサイズ変更されることを意味し、scrollingEnabled
のfalse
をUITextView
に設定します。
したがって、実行すると、almostは完全に機能します。
1つの問題は、UIImageView
が実際の画面幅よりも約10%大きいことです。したがって、水平スクロールが有効になります。
行を追加してみました
imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width
しかし、これは違いはありません。私はまだ水平にスクロールできますが、画像ビューは実際の画面幅よりも約10%大きくなります。
注:ストーリーボードでimageView画面の幅を設定したのではなく、プログラムでのみ設定しました。
何か案は?
このような、
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
scrollView.contentOffset.x = 0
}
}
そして、このプロパティを設定できます:
scrollImg.directionalLockEnabled = true
これを変更して、0を返すようにしました。スクロールオフする場合は、チェックする必要はありません。
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
方向ロックの必要はありません。
Swift 4
水平スクロールロック
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 {
scrollView.contentOffset.x = 0
}
}
垂直スクロールのxをyに変更できます。
このようにUIScrollViewDelegateを追加してください:
class MyViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet var scrollView: UIScrollView!
...
}
ScrollViewのデリゲートを設定します
scrollView.delegate = self
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
これにより、スクロールビューがリーディングエッジに向かってスクロールするのも停止します。
ストーリーボードと自動レイアウトを使用している場合は、自動レイアウトを使用したストーリーボードでのScrollViewの動作を検討する必要があります。
以下を考慮してください。
ScrollViewに、左、右、上、下、高さ、幅、
幅と高さの出口を作る
ScrollViewで追加したビューにサブビューを追加します
幅をscreenSizeに更新します(例:iPhone5または320の場合は320)。
self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];