水平 UIScrollView 中的多个垂直滚动 UIScrollView
Posted
技术标签:
【中文标题】水平 UIScrollView 中的多个垂直滚动 UIScrollView【英文标题】:Multiple vertically scrolling UIScrollViews in a horizontal UIScrollView 【发布时间】:2012-07-08 20:56:40 【问题描述】:我正在开发一个应用程序,其中有一个可水平滚动的 UIScrollView 全屏,其中包含多个(比如说 3 个)可垂直滚动的 UIScrollView,每个也是全屏的。它们的位置没有边距,左边的原点是 (0,0)。
每个可垂直滚动的 UIScrollView 都由一个在另一个之上放置的按钮组成,每个按钮在单击时都会呈现一个 ViewController:
[self presentViewController:someViewController animated:YES completion:nil];
现在这段代码适用于右边的两个 UIScrollView,但左边的却有问题:
水平 UIScrollView 高度下方的按钮不可点击。所以如果水平 UIScrollView 的高度是 440px,那么任何 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 的视图宽 1px,然后使其 origin.x = -1。但是,我还是想看看是否有人知道到底发生了什么。 这看起来很老套。可以贴一些代码吗? @EliGregory 不幸的是。我添加了设置代码。 首先确保您已正确设置水平滚动视图 - 这是一个可靠的教程:iosdevnotes.com/2011/03/uiscrollview-paging 目前,我也在构建这样的应用程序。我的还启用了带分页的水平滚动,然后在页面上垂直滚动。它运作良好。我不知道你的为什么会出错,主要是因为我看不到你的代码,尽管我愿意提供建议。 【参考方案1】:差不多一年后我解决了这个问题!
问题是,我在 XIB 文件中进行大部分视图管理,然后我只是在 viewDidLoad 方法中读取这些内容视图和滚动视图并将它们放在一起。
现在我重写了我的代码,以编程方式创建所有滚动视图和内容视图,并且一切正常。
【讨论】:
以上是关于水平 UIScrollView 中的多个垂直滚动 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 子视图中的水平 UISwipeGestureRecognizer ? (UIScrollView 只需要识别垂直滚动)
iOS - 具有多个 UITableViews 的水平 UIScrollView
使用按钮检测水平滚动 UIScrollView 上的垂直滚动
水平 UIScrollView 内部有垂直 UIScrollViews - 滚动外部水平视图时如何防止滚动内部滚动视图?