如何阻止UIScrollView水平弹跳?

时间:2008-10-06 10:12:35

标签: iphone cocoa-touch

我有一个显示垂直数据的UIScrollView,但水平组件的宽度不比iPhone的屏幕宽。问题是用户仍然能够水平拖动,并且基本上暴露UI的空白部分。我试过设置:

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

这有点帮助,但仍然不能阻止用户水平拖动。当然有一种方法可以轻松解决这个问题吗?

11 个答案:

答案 0 :(得分:18)

scrollView.bounces = NO;

为我工作。

答案 1 :(得分:14)

这很奇怪,因为每当我在任一维度上创建一个框架和内容大小在屏幕范围内的滚动视图时,滚动视图就不会在该方向上滚动(或反弹)。

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

你确定框架完全适合屏幕,而且contentSize的宽度不大于滚动视图的宽度吗?

答案 2 :(得分:7)

在storyboard-scrollview中垂直弹跳的复选框可以简单地帮助...

enter image description here

答案 3 :(得分:6)

尝试将scrollView.bounces设置为NO并将scrollView.alwaysBounceVertical设置为YES。

答案 4 :(得分:4)

在Swift中对我有用:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false

答案 5 :(得分:2)

视图是否水平滚动(和反弹)取决于三件事:

  • 内容大小
  • 左右内容插入
  • 滚动视图的宽度 -

如果滚动视图可以适合内容大小加上插图,则它不会滚动或反弹。

避免水平弹跳:

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

我正在添加这个答案,因为之前的答案没有考虑到contentInset。

答案 6 :(得分:1)

确保UIScrollView的contentSize不比UIScrollView本身宽。在我自己的应用程序中,这足以避免水平滚动,除非我在随机方向上疯狂地滑动(例如,在视图仍在减速时启动滚动)。

答案 7 :(得分:0)

要记住一些事情:知道水平看不到任何额外的东西,但你的用户会知道吗?您可能需要稍微水平反弹,即使没有额外的内容可以横向显示。这让用户知道他们的水平滚动尝试不会被忽略,他们没有什么可以看到的。但是,是的,通常你真的不想反弹。

答案 8 :(得分:0)

我的webViews版本,一个常见的解决方案:

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

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

}

答案 9 :(得分:0)

如果开发OS X的任何人在这里看,从OS X 10.7开始,解决方案是在滚动视图上将horizontalScrollElasticity属性设置为false / NO,就像这样:

夫特:

scrollView.horizontalScrollElasticity = false

目标-C:

scrollView.horizontalScrollElasticity = NO

答案 10 :(得分:0)

就我而言,我只需要设置以下行:

collectionView.bounces = false