iPhone - 嵌套 UIScrollViews 以进行水平分页和垂直滚动

问题描述 投票:0回答:5

我正在开发我的第一个 iPhone 应用程序,非常感谢你们对我遇到的问题提供意见。

我希望实现水平和垂直滚动。我希望水平滚动进行分页,而不进行垂直滚动(“正常”滚动)。 pagingEnabled 设置为 YES 的单个 UIScrollView 将在两个方向上分页。自然的解决方案是将一个 UIScrollView 嵌套在另一个 UIScrollView 中,但是当我这样做时,我根本无法让“内部”UIScrollView 滚动。似乎外部事件正在“吞噬”所有点击事件,例如:

UIScrollView:水平分页、垂直滚动?

我读到了一些关于“内部滚动”在 SDK 3.0 中得到改进的内容,实际上当我添加内部 UITableView 而不是 UIScrollView 时,滚动可以完美地工作。由于 UITableView 是 UIScrollView 的子类,我想我想要的行为应该可以通过创建自己的 UIScrollView 子类来实现。

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

iphone scroll uiscrollview
5个回答
9
投票

现在可以通过 SDK 开箱即用。有关如何使用每个页面的视图控制器实现分页水平滚动的指南,请参阅疯狂滚动Apple 的 UIPageControl 示例

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


1
投票

如果你正在尝试像 Twitter 个人资料 UI 这样的东西,我通过将标题视图和底部滚动视图放在父滚动视图中并在后面放置另一个滚动视图来实现这一点。

底层scrollview负责调整header和bottom的内容偏移量。它的内容大小也根据内部项目的高度进行调整。

我讲起来好像很复杂,最好看代码 https://github.com/OfTheWolf/Twitterprofile


0
投票

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

您可以将其用作“水平 UITableView”,支持分页和视图回收。 制作精良,完美的可可风格设计。


0
投票

根据 Dylan 的回答,就我而言,实际上我还必须使父级 UIScrollView 和嵌套 UIScrollView 的内容大小高度相等,以使嵌套 UIScrollView 垂直滚动。正如迪伦解释的那样,仅制作“与容器相同的框架高度”是不够的:

parentScrollView.contentSize = CGSizeMake(parentScrollView.contentSize.width, desiredContentHeight);
nestedScrollView.contentSize = CGSizeMake(nestedScrollView.frame.size.width, desiredContentHeight);

0
投票

什么迪伦说的。 并且,也许对此主题感兴趣 - 您不需要在主“分页”UIScrollView 中启用滚动,只需启用分页和方向锁定。 这似乎可以确保所有垂直滚动提示都进入嵌套的、固定大小的垂直滚动 NSScrollView。 它至少可以恢复到 iOS 9。

© www.soinside.com 2019 - 2024. All rights reserved.