UIScrollView 在第一次触摸时会向下跳

Posted

技术标签:

【中文标题】UIScrollView 在第一次触摸时会向下跳【英文标题】:UIScrollView jumps down when first touched 【发布时间】:2012-06-20 04:57:20 【问题描述】:

我有两个 UIScrollViews,一个水平的,一个垂直的,每个两个页面(如,水平的一个是两页宽,垂直的一个是两页高)。水平滚动视图位于垂直滚动视图中。我正在尝试模仿 Calcbot 的设计,您可以在其中向左/向右滚动查看按钮,向上/向下滚动查看历史记录。

但是,当视图加载时,水平滚动视图比应有的位置高出大约 100 像素。然后,当我触摸它并开始稍微移动它时,它会跳/跳到正确的位置并停留在那里。如何让它从一开始就正确显示?

这是我的 viewDidLoad 代码:

-(void)viewDidLoad 
horizontalScrollView.pagingEnabled = YES;
verticalScrollView.pagingEnabled = YES;


horizontalScrollView.contentSize = CGSizeMake(horizontalScrollView.bounds.size.width * 2, horizontalScrollView.bounds.size.height); // 2 pages wide.
verticalScrollView.contentSize = CGSizeMake(verticalScrollView.bounds.size.width, verticalScrollView.bounds.size.height * 2);


horizontalScrollView.delegate = self;
verticalScrollView.delegate = self;




[verticalScrollView addSubview:horizontalScrollView];

[verticalScrollView setContentOffset:CGPointMake(0, 640)];

[self.view addSubview:verticalScrollView];

horizontalScrollView.frame = CGRectMake(0, 540, 320, 460);


谢谢。

【问题讨论】:

【参考方案1】:

当您设置 pagingEnabled = YES 并且 contentOffset 设置为不在页面边界上的位置(可被 bounds.size.height 整除)时,通常会在 UIScrollView 中跳转。

【讨论】:

我刚刚将 contentOffset 更改为 380 并且它起作用了。谢谢。 在稍微不同的情况下,这也解决了我的跳跃问题。从我之前做的一些测试中,我有一个仅垂直的 UIScrollView 和 pagingEnabled。每当我向下滚动然后点击任何地方时,它都会跳回来。将其切换回来,一切都很好。 嘿@patridge 你能解释一下你的评论吗.. 我有类似的问题。 @Mystery 已经有几年了,但我猜我也不得不关闭 pagingEnabled,即使我没有嵌套的 UIScrollView 并且没有手动设置 contentOffset。跨度> 【参考方案2】:

只是一个快速的想法,因为我目前也在搞乱 UIScrollView。您可以尝试使用-(void)viewWillAppear:(BOOL)animated。例如。我在该方法中设置了最小和最大滚动,因为它取决于内容的大小,从我阅读的内容来看,直到 viewWillAppear 才设置。

【讨论】:

谢谢,不过我刚试了一下,似乎没有任何改变。【参考方案3】:

移动这一行

horizontalScrollView.frame = CGRectMake(0, 540, 320, 460);

viewWillAppear而不是viewDidLoad中,看看它是否有效

【讨论】:

不幸的是,它仍然看起来比应有的要高。不过,谢谢你的建议。

以上是关于UIScrollView 在第一次触摸时会向下跳的主要内容,如果未能解决你的问题,请参考以下文章

ios在两个uiscrollview之间移动触摸事件

分页uiscrollview自动滚动到第一页

无论触摸发生在哪里,都滚动 UIScrollView

防止重叠的 UIScrollView 滚动

裁剪边界之外的 UIScrollview 子视图未接收到触摸

在 uiscrollview 中检测 toucesbegin