web-dev-qa-db-ja.com

UIScrollViewからの水平スクロールの無効化Swift

スクロールビュー

制約付きの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がその内容に関してサイズ変更されることを意味し、scrollingEnabledfalseUITextViewに設定します。

したがって、実行すると、almostは完全に機能します。

1つの問題は、UIImageViewが実際の画面幅よりも約10%大きいことです。したがって、水平スクロールが有効になります。

行を追加してみました

imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width

しかし、これは違いはありません。私はまだ水平にスクロールできますが、画像ビューは実際の画面幅よりも約10%大きくなります。

注:ストーリーボードでimageView画面の幅を設定したのではなく、プログラムでのみ設定しました。

何か案は?

20
Greg Peckory

このような、

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.x>0 {
        scrollView.contentOffset.x = 0
    }
}

そして、このプロパティを設定できます:

scrollImg.directionalLockEnabled = true
17
Loxx

これを変更して、0を返すようにしました。スクロールオフする場合は、チェックする必要はありません。

func scrollViewDidScroll(scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0
}

方向ロックの必要はありません。

22
the_dude_abides

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
17
HunterCopp
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0
}

これにより、スクロールビューがリーディングエッジに向かってスクロールするのも停止します。

3
Steven Lee

ストーリーボードと自動レイアウトを使用している場合は、自動レイアウトを使用したスト​​ーリーボードでのScrollViewの動作を検討する必要があります。

以下を考慮してください。

  1. ScrollViewに、左、右、上、下、高さ、幅、

  2. 幅と高さの出口を作る

  3. ScrollViewで追加したビューにサブビューを追加します

幅をscreenSizeに更新します(例:iPhone5または320の場合は320)。

self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];
1
Rohit Kumar