IOS:使整个视图可滚动,而不仅仅是子视图

Posted

技术标签:

【中文标题】IOS:使整个视图可滚动,而不仅仅是子视图【英文标题】:IOS : Make entire view scrollable, not only subview 【发布时间】:2015-08-04 12:40:25 【问题描述】:

我有一个 viewController,其中有一个 scrollView,其中有 3 个视图。这是一个方案:

滚动视图(UIScrollView) 标题(UIView) 标签栏 (UIView) 容器(我在其中加载 ViewController 的 UIView)

主要问题是,在我的容器(其中有一个视图控制器)中,我有一个 collectionView(它可以滚动),但我希望我的整个 scrollView 滚动(不仅仅是我的容器)。

这就是我所拥有的:

这就是我想要的:

任何人都可以帮助我吗?

【问题讨论】:

你能看到容器内的内容,即里面的视图控制器吗? 如果您在 HeaderTabBar 上启动滚动手势 - 整个视图会滚动吗? @iphondroid 是的,我可以查看容器内的内容。如果内容大于视图,我可以滚动容器视图内的元素 @GavinHope 不,当我在 Header 或 TabBar 视图上启动滚动手势时,我无法滚动视图。我只能在容器上开始滚动手势时滚动,但只有容器视图才能滚动 嘿!你有没有解决过这个问题,我问过一个非常相似的问题!如果你确实修复了它,你能告诉我怎么做吗?!快把我逼疯了! 【参考方案1】:

我刚刚为我自己的项目解决了这个问题。假设您使用的是故事板,我将 UIView 设为 UITableView 的子项,并使 UITableView 扩展了设备的完整视口。

由于 UITableView 实现了 UIScrollView,因此您可以全屏滚动内容。

一般规则您的父视图必须实现 UIScrollView 并扩展全屏才能获得视口垂直滚动。

【讨论】:

【参考方案2】:

为此,如果您不使用自动布局或以编程方式向容器添加视图,则必须在加载一些数据后手动设置集合视图框架以匹配其内容大小。如果您使用自动布局,您应该创建高度约束插座并根据集合视图内容大小设置其常量值,再次在其上加载数据后

【讨论】:

【参考方案3】:

您应该设置容器视图的框架以匹配它加载在其中的视图控制器的高度,并根据容器高度设置scoolview的内容大小。

【讨论】:

我同意这种方法,此外,您可以使用协议在子“容器”滚动时通知“父”视图控制器,然后适当地移动标签栏和标题。 @Fabiosalata 当我执行 containerView.frame = controller.view.frame 和 scrollView.contentSize.height = containerView.frame.height 时,我的 Header 和 TabBar 不会出现:s @user3369214 你必须对所有视图高度求和,而不仅仅是容器视图 @FábioSalata 它看起来不错(即使它不会加载我的 collectionview 的每个单元格)但我认为每次加载单元格(在视图控制器中)时我必须实现“容器”的高度但是现在,即使我可以滚动并查看我的单元格,我也无法单击滚动之前未显示的单元格... :(【参考方案4】:

只有当内容大于框架时,滚动视图才会滚动。 这适用于父滚动视图和子滚动视图。 在您的情况下,父滚动视图一起滚动其内容(标题、标签栏和容器)必须比其父级具有更大的高度。子滚动视图(容器)已经在滚动,因为它的内容(视图控制器)的高度大于其父级。

我已经让两个滚动视图都滚动了:

(1) 父滚动视图 - 通过增加子滚动视图的高度,使其延伸到主视图控制器的框架下方。子滚动视图是主滚动视图的内容之一。

(2) 子滚动视图 - 在其中设置较大的内容,使其大于其父级。我使用了很长的 UIImage 作为它的内容。

另外,我使用了自动布局并通过添加约束将内容固定到滚动视图的两侧。

希望这会有所帮助。

这是它的滚动方式:Scrolling of UIScrollView inside another

【讨论】:

以上是关于IOS:使整个视图可滚动,而不仅仅是子视图的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT:如何修复单元格荧光笔并使整个集合视图滚动而不是荧光笔?

如何使视图控制器可滚动?

如何使整个页面可滚动?

如何使带有选项卡视图的视图可滚动?

固定 UIScrollView 的子视图,而其他子视图可滚动

iOS:自动布局的问题。模拟器结果随着情节提要的变化而变化