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 在第一次触摸时会向下跳的主要内容,如果未能解决你的问题,请参考以下文章