一个水平的UIScrollView中有多个垂直滚动的UIScrollViews

3
我正在开发一个应用程序。其中有一个水平滚动的UIScrollView,占据整个屏幕,并带有分页功能,其中包含多个(假设为3个)垂直可滚动的UIScrollViews,每个也占据整个屏幕。它们没有边距,左侧的原点是(0,0)。
每个垂直可滚动的UIScrollView都由按钮组成,这些按钮放置在彼此上方。单击每个按钮会呈现一个ViewController:
[self presentViewController:someViewController animated:YES completion:nil];

现在这段代码对于右侧的两个UIScrollViews运行良好,但是对于左侧的一个存在错误:
  • 水平UIScrollView下面高度低于440像素的按钮无法点击。所以如果水平UIScrollView的高度为440像素,则任何origin.y> 440的UIButton都无法点击。
  • 如果UIScrollView略微向下滚动并单击了一个按钮(不在440像素以下),整个UIScrollView会被“移动”下来,并且在请求的视图控制器呈现时会变得有点卡顿。当此视图控制器被解除时,滚动视图仍然保持较低状态。如果我将其向上滚动并按下一个按钮,它会神奇地跳到应该在的位置。

现在来看有趣的部分!

如果我将左侧UIScrollView的原点更改为(1,0),则此问题消失了!是什么导致了这个问题?

一些附加代码:

[horizontalSV setDelegate:self];
[horizontalSV setContentSize:horizontalContentView.frame.size];
[horizontalSV addSubview:horizontalContentView];                  // View containing vertical scroll views, it's set up in IB
[horizontalContentView setFrame:CGRectMake(-1, 0, 961, 440)];     // This is now used for the hack

// Now imagine three of these
firstSVcontent = [[VerticalContentView alloc] init];              // Setting the content view
[firstSVcontent setTitle:title];
[firstSVcontent setButtons:blahblah];
[firstVerticalSV setContentSize:firstSVcontent.view.frame.size];  // Setting vertical scroll view
[firstVerticalSV addSubview:firstSVcontent.view];

好的,我已经找到了一个解决方法:将包含可垂直滚动的UIScrollViews的视图宽度增加1个像素,然后将其origin.x设置为-1。但是,我仍然想知道有没有人知道这到底是怎么回事。 - Gasper
那看起来有些过于粗糙了。你能复制一些代码吗? - esreli
@EliGregory 很不幸,它确实是这样的。我已经添加了设置代码。 - Gasper
首先确保您已正确设置水平滚动视图 - 这是一个可靠的教程:http://www.iosdevnotes.com/2011/03/uiscrollview-paging/ - esreli
目前,我也正在构建一个类似的应用程序。我的应用程序也具有启用分页的水平滚动和页面上的垂直滚动。它运行良好。我不知道为什么你的应用程序出现了问题,可能是因为我看不到你的代码,但我愿意提供建议。 - esreli
它已经正确设置了,而且我以前处理过许多UIScrollViews,但这是第一次。谢谢你的建议,不过我会尝试从头开始制作并查看问题是否仍然存在。目前我对这个hack感到非常满意,因为它按照预期工作。 - Gasper
1个回答

2

我几乎一年后解决了这个问题!

问题出在我大部分的视图管理都是在XIB文件中完成的,然后我只是在viewDidLoad方法中读取那些内容视图和滚动视图并将它们组合在一起。

现在我已经重写了我的代码,以编程方式创建所有滚动视图和内容视图,并且一切都正常工作,没有任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接