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

10

我想创建一个视图,其中有三个子视图叠放在一起,中间的子视图可滚动,其他视图固定。

我如何通过编程实现这一点? 我已经尝试了以下方法:

  • 将根视图的内容大小设置为可滚动视图的大小,但这会使所有视图都可以滚动。

如果仅对中间的子视图设置内容大小而不设置根视图的任何属性,则所有视图均无法滚动。

请帮助我。 我是iOS新手。

提前致谢

3个回答

28

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

例如,如果您希望固定视图始终距离滚动视图顶部100像素,则将其初始框架设置为(0, 100, width, height),然后在回调函数中将框架设置为(0, contentOffset.y + 100, width, height)

结果是,子视图将出现在给定高度处固定不动。


谢谢!那个方法可行。只是我的滚动视图需要水平滚动,所以我在委托中更新了框架的x坐标。 - sam
没问题!我以为你在做垂直滚动 - 很高兴一切都解决了。 - kevboh
好的。我检查了一下,似乎这正是自 iOS 3.2 以来 UITableView 使用 backgroundView 的方式。 - ySgPjx
它可以在一个tableview中使用额外列,这很酷,但我遇到了视图(标签)方面的问题。我想固定的元素保持在其位置,但它会被scrollview内部移动的视图覆盖。你有什么想法是什么原因吗? - JMGH
你需要使用类似于 [self.view bringSubviewToFront:label] 的方法,将它们移动到那些视图的前面。 - kevboh

3

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


1
你可以通过将UIScrollView的子视图移动到其父视图上来实现,方法如下所示:
将按钮放置/设置在滚动视图之上(而不是内部),如此快照所示。同时,还要相对于您的滚动视图的父视图设置按钮约束(位置)。

enter image description here

以下是每个视图在彼此之上的位置层次结构的参考快照。

enter image description here


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