18

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

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

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

4

12 回答 12

22
scrollView.bounces = NO;

为我工作。

于 2014-03-30T21:46:34.267 回答
16

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

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

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

于 2008-10-06T16:04:29.270 回答
9

故事板滚动视图中垂直反弹的复选框可以简单地帮助......

在此处输入图像描述

于 2013-01-19T11:01:19.783 回答
6

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

于 2008-10-06T10:51:09.680 回答
6

这在 Swift 中对我有用:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false
于 2016-11-10T20:49:51.450 回答
2

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

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

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

避免像这样的水平弹跳:

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

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

于 2013-01-19T09:05:00.070 回答
1

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

于 2008-10-06T21:09:13.973 回答
0

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

于 2008-10-07T14:38:43.730 回答
0

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

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

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

}
于 2012-06-08T12:51:44.653 回答
0

如果为 OS X 开发的任何人都在看这里,从 OS X 10.7 开始,解决方案是在滚动视图上将 Horizo ​​ntalScrollElasticity属性设置为false/ ,如下所示:NO

迅速:

scrollView.horizontalScrollElasticity = false

目标-C:

scrollView.horizontalScrollElasticity = NO
于 2016-08-09T01:20:04.010 回答
0

您可以像这样禁用水平反弹:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x < 0) {
        scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
    } else if (scrollView.contentOffset.x > scrollView.contentSize.width) {
        scrollView.contentOffset = CGPointMake(scrollView.contentSize.width, scrollView.contentOffset.y);
    }
}

它手动重置 contentOffset.x 并且不会影响垂直反弹。有用...

于 2021-11-16T13:36:00.980 回答
-1

就我而言,我只需要设置这一行:

collectionView.bounces = false

于 2019-01-07T09:43:31.810 回答