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

Posted

技术标签:

【中文标题】固定 UIScrollView 的子视图,而其他子视图可滚动【英文标题】:Make subview of a UIScrollView fixed while the other subviews scrollable 【发布时间】:2011-01-27 15:07:34 【问题描述】:

我想制作一个视图,其中三个子视图相互堆叠,中间子视图可滚动,其他子视图固定。

如何以编程方式实现这一目标?我试过了

将根视图的 contentsize 设置为可滚动视图的大小,但这会使所有视图滚动。

-设置中间子视图的内容大小,而不为根视图设置任何属性,但这会使所有视图都不可滚动。

请帮忙。我是 ios 新手。

提前致谢

【问题讨论】:

【参考方案1】:

您可以使用UIScrollView 上的scrollViewDidScroll: 委托回调来调整视图的位置。在回调中,获取滚动视图的contentOffset 并使用它来设置固定视图的位置。

例如,如果您希望固定视图始终保持距离滚动视图顶部 100 像素,请将其初始帧设置为 (0, 100, width, height),然后在回调中将帧设置为 (0 , contentOffset.y + 100, 宽度, 高度)。

结果是子视图将固定在给定的高度。

【讨论】:

谢谢!那行得通。只是我的滚动视图需要水平滚动,所以我更新了委托中框架的 x 坐标。 没问题!我以为你在做垂直滚动——很高兴一切顺利。 酷。我检查了一下,这似乎正是 UITableView 自 iOS 3.2 以来对 backgroundView 所做的。 它可以与 tableview 中的附加列一起使用,这很酷,但是我的视图(标签)有问题,我想要修复的元素保持在它的位置,但它被移动覆盖了滚动视图中的视图,知道会发生什么吗? 您需要使用[self.view bringSubiewToFront:label] 之类的方式将它们移动到这些视图的前面。【参考方案2】:

如果您的 UIScrollView 有一个超级视图(即容器视图),您可以将您的“固定”视图添加为超级视图的子视图,而不是 UIScrollView。您只需计算一次框架坐标。

【讨论】:

【参考方案3】:

您可以将子视图从 UIScrollView 移动到滚动视图的超级视图,例如:

将您的按钮放置/设置在滚动视图上(不在滚动视图内),如此处快照所示。并且还针对滚动视图的超级视图设置按钮约束(位置)。

这里是参考。每个视图的位置层次结构快照。

【讨论】:

以上是关于固定 UIScrollView 的子视图,而其他子视图可滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何锚定 UIScrollView 的子视图,如移动 Safari 中的 URL 栏?

有没有办法将 UIView 嵌入到 UIScrollview 中而不会丢失 iOS 中的子视图约束?

固定/浮动视图在 UIScrollView 与 AutoLayout

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

UIScrollView 弄乱了它的子视图

记录 UIScrollView 的子视图会显示未添加的子视图