iPhone - 嵌套 UIScrollViews 用于水平分页和垂直滚动
Posted
技术标签:
【中文标题】iPhone - 嵌套 UIScrollViews 用于水平分页和垂直滚动【英文标题】:iPhone - Nesting UIScrollViews for horizontal paging and vertical scrolling 【发布时间】:2010-07-12 18:44:26 【问题描述】:我正在开发我的第一个 iPhone 应用程序,非常感谢您对我遇到的问题提出意见。
我希望实现水平和垂直滚动。我希望水平滚动被分页,而垂直滚动不被分页(“正常”滚动)。 pagingEnabled 设置为 YES 的单个 UIScrollView 将双向分页。自然的解决方案是将 UIScrollView 嵌套在另一个 UIScrollView 中,但是当我这样做时,我根本无法让“内部” UIScrollView 滚动。似乎外部正在“吃掉”所有的点击事件,例如:
UIScrollView : paging horizontally, scrolling vertically?
我读到一些关于在 SDK 3.0 中改进的“内部滚动”的内容,实际上当我添加一个内部 UITableView 而不是 UIScrollView 时,滚动工作完美无缺。由于 UITableView 子类 UIScrollView 我想我想要的行为应该可以通过创建我自己的 UIScrollView 子类来实现。
这是正确的方法吗?如果是这样,这个子类应该是什么样的?
【问题讨论】:
【参考方案1】:现在可以使用 SDK 开箱即用。请参阅Scrolling Madness 和Apple's UIPageControl sample,了解如何使用每个页面的视图控制器实现分页水平滚动。
作为子视图添加到外部 UIScrollView 的嵌套 UIScrollView 应该与容器具有相同的帧高度。如果你这样做,那么外部 UIScrollView 将通过垂直滚动事件传递给子视图。我的应用程序具有三个级别的 UIScrollView 和 UIWebView 嵌套,我发现 Cocoa 在将事件传递给我想要的事件方面非常聪明,只要我设置我的帧大小以便只有一个视图是真正可滚动的(contentSize > frame)每个轴。
【讨论】:
谢谢你。这确实是开箱即用的。我相信您的垂直滚动页面的***视图必须是 UIScrollView。最初,我在 UIView 下放置了垂直滚动条,但这并没有按预期工作。请记住还要设置垂直滚动条的 contentSize。【参考方案2】:如果您正在尝试类似 Twitter 个人资料 UI 的东西,我通过将标题视图和底部滚动视图放在父滚动视图中并在后面放置另一个滚动视图来实现这一点。
Underlaying scrollview负责调整header和bottom的内容偏移量。它的 contentsize 也由内部项目高度调整。
我说的时候看起来很复杂,最好看代码 https://github.com/OfTheWolf/Twitterprofile
【讨论】:
【参考方案3】:几个月来我一直在使用 Andrey Tarantsov 的这个伟大的库:SoloComponents
您可以将它用作支持分页和视图回收的“水平 UITableView”。 制作精良,完美的可可风格设计。
【讨论】:
【参考方案4】:根据 Dylan 的回答,就我而言,实际上我还必须使父 UIScrollView 和嵌套 UIScrollView 的内容大小高度相等,以使嵌套 UIScrollView 垂直滚动。正如 Dylan 解释的那样,只制作“与容器相同的框架高度”是不够的:
parentScrollView.contentSize = CGSizeMake(parentScrollView.contentSize.width, desiredContentHeight);
nestedScrollView.contentSize = CGSizeMake(nestedScrollView.frame.size.width, desiredContentHeight);
【讨论】:
【参考方案5】:Dylan 说了什么。而且,也许对这个话题很感兴趣——您不需要在主“分页”UIScrollView 中启用滚动,只需启用分页和方向锁定。这似乎可以确保所有垂直滚动提示都转到嵌套的、固定大小、垂直滚动的 NSScrollViews。它至少可以回溯到 ios 9。
【讨论】:
以上是关于iPhone - 嵌套 UIScrollViews 用于水平分页和垂直滚动的主要内容,如果未能解决你的问题,请参考以下文章