web-dev-qa-db-ja.com

UIScrollViewが水平方向にバウンスするのを防ぐにはどうすればよいですか?

垂直方向のデータを表示するUIScrollViewがありますが、水平方向のコンポーネントはiPhoneの画面よりも広くありません。問題は、ユーザーが引き続き水平方向にドラッグでき、基本的にUIの空白のセクションが表示されることです。私は設定を試みました:

scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;

これは少し役立ちますが、それでもユーザーが水平方向にドラッグできるのを妨げることはありません。確かにこれを簡単に修正する方法はありますか?

14
rustyshelf

これは奇妙なことです。どちらかの次元で画面の境界内にフレームとコンテンツサイズのスクロールビューを作成すると、スクロールビューはその方向にスクロール(またはバウンス)しません。

// Should scroll vertically but not horizontally
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollView.contentSize = CGSizeMake(320, 1000);

フレームが画面に完全に収まり、contentSizeの幅がスクロールビューの幅より大きくないことを確認しますか?

15
Mike McMaster
scrollView.bounces = NO;

私のために働いた。

18
Asnis Apps

ストーリーボードで垂直方向にバウンスするためのチェックボックス-スクロールビューは簡単に役立ちます...

enter image description here

7
Jaldip Katre

ScrollView.bouncesをNOに設定し、scrollView.alwaysBounceVerticalをYESに設定してみてください。

6
Darron

それはSwiftで私のために働きます:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false
6
Michael Katkov

ビューが水平方向にスクロール(およびバウンス)するかどうかは、次の3つのことに依存します。

  • コンテンツサイズ
  • 左右のコンテンツインセット
  • スクロールビューの幅-

スクロールビューがコンテンツサイズとインセットに収まる場合、スクロールまたはバウンスしません。

次のように水平方向のバウンスを避けます。

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);

以前の回答ではcontentInsetが考慮されていなかったため、この回答を追加します。

2
n13

UIScrollViewのcontentSizeがUIScrollView自体よりも広くないことを確認してください。私自身のアプリでは、これで水平スクロールを回避できました。ただし、ランダムな方向にスワイプするのが非常に狂った場合(たとえば、ビューがまだ減速しているときにスクロールを開始する場合)は例外です。

1
benzado

私の場合、次の行を設定する必要があります。

collectionView.bounces = false

0
Luan Si Ho

OS X用に開発している人がここを探している場合、OS X 10.7以降、解決策は、スクロールビューで horizo​​ntalScrollElasticity プロパティをfalse/NOに設定することです。このような:

迅速:

scrollView.horizontalScrollElasticity = false

Objective-C:

scrollView.horizontalScrollElasticity = NO
0
Addison

覚えておくべきこと:あなた水平方向に見るものは何もないことを知っていますが、ユーザーはそれを知っていますか?水平方向に表示する余分なコンテンツがない場合でも、少し水平方向にバウンスする必要がある場合があります。これにより、ユーザーは、水平方向にスクロールしようとする試みが無視されておらず、表示できるものが何もないことを知ることができます。しかし、ええ、あなたは本当にバウンスを望まないことがよくあります。

0
spotcatbug

私のバージョンのwebViews、一般的な解決策:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];

}
0
wzbozon