固定 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