Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何阻止UIScrollView水平反弹?_Iphone_Cocoa Touch - Fatal编程技术网

Iphone 如何阻止UIScrollView水平反弹?

Iphone 如何阻止UIScrollView水平反弹?,iphone,cocoa-touch,Iphone,Cocoa Touch,我有一个显示垂直数据的UIScrollView,但水平部分不比iPhone屏幕宽。问题是用户仍然能够水平拖动,并且基本上可以公开UI的空白部分。我试过设置: scrollView.alwaysBounceHorizontal = NO; scrollView.directionalLockEnabled = YES; 这有点帮助,但仍然不能阻止用户水平拖动。当然有办法轻松解决这个问题吗?尝试将scrollView.bounces设置为“否”,将scrollView.AlwaysBouncesV

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

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

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

尝试将scrollView.bounces设置为“否”,将scrollView.AlwaysBouncesVertical设置为“是”。

这很奇怪,因为每当我创建的滚动视图的框架和内容大小在屏幕的任意尺寸范围内时,滚动视图都不会向该方向滚动(或反弹)

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

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

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

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

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

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

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

}

视图是否水平滚动(和反弹)取决于三个因素:

  • 内容大小
  • 左侧和右侧内容插入
  • 滚动视图的宽度-
如果滚动视图可以适应内容大小加上插图,则不会滚动或反弹

避免水平反弹,如下所示:

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

我之所以添加这个答案,是因为前面的答案没有考虑contentInset。

在storyboard scrollview中选中“垂直反弹”复选框很有帮助

scrollView.bounces = NO;


为我工作。

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

斯威夫特:

scrollView.horizontalScrollElasticity = false
目标C:

scrollView.horizontalScrollElasticity = NO

这在Swift中对我有效:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false

在我的情况下,我只需要设置以下行:


collectionView.bounces=false

这已经是一半了,现在它垂直滚动,但不再水平滚动,但不再垂直弹跳…如果它仍然可以垂直弹跳就好了,因为在iPhone上没有弹跳滚动似乎不太自然。@rustyshelf我知道有点晚了,但除了Darron的回答,还可以执行
滚动查看。directionalLockEnabled=YES
这也会禁用垂直反弹。它也会禁用垂直反弹。