iPhone - 嵌套UIScrollViews实现水平分页和垂直滚动

14

我正在开发我的第一个iPhone应用程序,并且非常感谢您对我遇到的问题提出建议。

我想实现水平和垂直双向滚动。我希望水平滚动是分页的,而垂直滚动则不是(“正常”滚动)。将pagingEnabled设置为YES的单个UIScrollView将在两个方向上分页。自然的解决方案是在另一个UIScrollView中嵌套一个UIScrollView,但是,当我这样做时,我无法让“内部”的UIScrollView滚动。外部UIScrollView似乎“吃掉”了所有的点击事件,就像这篇文章中所说的那样:UIScrollView:水平分页,垂直滚动?

我读到关于SDK 3.0中“内部滚动”得到改进的内容,实际上,当我添加一个内部UITableView而不是UIScrollView时,滚动效果非常好。由于UITableView是UIScrollView的子类,因此我想通过制作自己的UIScrollView子类来实现所需的行为。

这是正确的方法吗?如果是,这个子类应该是什么样子?

5个回答

9

现在SDK已经支持开箱即用。请参考Scrolling Madness苹果UIPageControl示例,了解如何为每个页面使用视图控制器实现分页水平滚动的指南。

将您作为子视图添加到外部UIScrollView中的嵌套UIScrollViews应具有与容器相同的框架高度。如果这样做,则外部UIScrollView将将垂直滚动事件传递到子视图。我的应用程序有三个级别的UIScrollView和UIWebView嵌套,我发现只要我设置我的框架大小,以便每个轴上只有一个视图真正可滚动(contentSize> frame),Cocoa就会非常智能地将事件传递给我想要的那个视图。


谢谢您。这确实可以直接使用。我相信您的垂直滚动页面的顶层视图必须是UIScrollView。最初,我的垂直滚动器位于UIView下面,这并没有按预期工作。还要记得设置您的垂直滚动器的contentSize。 - user621267

1
如果您正在尝试类似Twitter个人资料UI的东西,我通过将标题视图和底部滚动视图放置在父滚动视图中,并在其后面添加另一个滚动视图来实现此目的。
底层滚动视图负责调整标题和底部的内容偏移量。它的内容大小也由内部项目高度进行调整。
当我讲述时似乎很复杂,最好看一下代码 https://github.com/OfTheWolf/Twitterprofile

0

Dylan所说的。此外,关于这个话题可能会感兴趣的是 - 您不需要在主“分页”UIScrollView中启用滚动,只需启用分页和方向锁定即可。这似乎确保所有垂直滚动提示都进入嵌套的固定大小的垂直滚动NSScrollViews。它可以在至少iOS 9上工作。


0

我已经使用了Andrey Tarantsov的这个很棒的库好几个月了:SoloComponents

你可以将其用作支持分页和视图回收的“水平UITableView”。 做得很好,完美地符合Cocoa的设计风格。


0
基于Dylan的回答,在我的情况下,我实际上还必须使父级和嵌套UIScrollViews的内容大小高度相等,以使嵌套的UIScrollView可以垂直滚动。仅仅像Dylan解释的那样“与容器相同的框架高度”是不够的:
parentScrollView.contentSize = CGSizeMake(parentScrollView.contentSize.width, desiredContentHeight);
nestedScrollView.contentSize = CGSizeMake(nestedScrollView.frame.size.width, desiredContentHeight);

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