垂直方向のデータを表示するUIScrollViewがありますが、水平方向のコンポーネントはiPhoneの画面よりも広くありません。問題は、ユーザーが引き続き水平方向にドラッグでき、基本的にUIの空白のセクションが表示されることです。私は設定を試みました:
scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;
これは少し役立ちますが、それでもユーザーが水平方向にドラッグできるのを妨げることはありません。確かにこれを簡単に修正する方法はありますか?
これは奇妙なことです。どちらかの次元で画面の境界内にフレームとコンテンツサイズのスクロールビューを作成すると、スクロールビューはその方向にスクロール(またはバウンス)しません。
// Should scroll vertically but not horizontally
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollView.contentSize = CGSizeMake(320, 1000);
フレームが画面に完全に収まり、contentSizeの幅がスクロールビューの幅より大きくないことを確認しますか?
scrollView.bounces = NO;
私のために働いた。
ストーリーボードで垂直方向にバウンスするためのチェックボックス-スクロールビューは簡単に役立ちます...
ScrollView.bouncesをNOに設定し、scrollView.alwaysBounceVerticalをYESに設定してみてください。
それはSwiftで私のために働きます:
scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false
ビューが水平方向にスクロール(およびバウンス)するかどうかは、次の3つのことに依存します。
スクロールビューがコンテンツサイズとインセットに収まる場合、スクロールまたはバウンスしません。
次のように水平方向のバウンスを避けます。
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);
以前の回答ではcontentInsetが考慮されていなかったため、この回答を追加します。
UIScrollViewのcontentSizeがUIScrollView自体よりも広くないことを確認してください。私自身のアプリでは、これで水平スクロールを回避できました。ただし、ランダムな方向にスワイプするのが非常に狂った場合(たとえば、ビューがまだ減速しているときにスクロールを開始する場合)は例外です。
私の場合、次の行を設定する必要があります。
collectionView.bounces = false
OS X用に開発している人がここを探している場合、OS X 10.7以降、解決策は、スクロールビューで horizontalScrollElasticity プロパティをfalse
/NO
に設定することです。このような:
迅速:
scrollView.horizontalScrollElasticity = false
Objective-C:
scrollView.horizontalScrollElasticity = NO
覚えておくべきこと:あなた水平方向に見るものは何もないことを知っていますが、ユーザーはそれを知っていますか?水平方向に表示する余分なコンテンツがない場合でも、少し水平方向にバウンスする必要がある場合があります。これにより、ユーザーは、水平方向にスクロールしようとする試みが無視されておらず、表示できるものが何もないことを知ることができます。しかし、ええ、あなたは本当にバウンスを望まないことがよくあります。
私のバージョンのwebViews、一般的な解決策:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];
}