【发布时间】:2019-08-04 16:48:39
【问题描述】:
我有一个这样排列的视图层次结构:
main view
---- scroll view
-------- label
-------- label
-------- text view
-------- horizontal stack view
-------- divider view (UIView)
-------- label
-------- container view (embeds a child view controller)
嵌入的子视图控制器是一个UICollectionViewController。
现在的问题是集合视图控制器包含很多元素,我希望滚动视图能够自动调整其内容大小以考虑集合视图高度,但事实并非如此。所以目前我只能看到集合视图的第一个元素,但我不能向下滚动。我尝试通过这种方式手动调整集合视图的内容大小:
func adjustContentSize() {
var contentRect: CGRect = .zero
for subview in self.scrollView.subviews {
contentRect = contentRect.union(subview.frame)
}
self.scrollView.contentSize = contentRect.size
}
但内容大小仍然不正确:它与窗口大小完全相等,即使它应该大得多以便为集合视图中的所有元素腾出位置。我认为问题主要与我嵌入子视图控制器这一事实有关,因为通常滚动视图内容大小会自动调整。但是在这种情况下该怎么办?如何告诉滚动视图正确的内容大小?
【问题讨论】:
-
不要使用
self.scrollView.contentSize = contentRect.size...使用约束并让自动布局为您完成。 -
@DonMag 通常约束是两个视图之间的关系。在这种情况下,我真的不知道如何表达类似的约束,我只能将其设置为单个视图的高度,而不是多个视图的高度。有什么建议吗?
-
"嵌入的子视图控制器是一个 UICollectionViewController。" -- 你如何定义集合视图的高度?你只是让它适合容器视图的大小吗?或者您是否试图让容器视图根据集合视图的高度更改其高度?
-
@DonMag 集合视图没有任何约束,因为它是集合视图控制器的主视图。容器视图改为固定在滚动视图内。
-
你说你正在使用 "container view" -- 你的意思是你在 IB / Storyboard 中进行布局,并且你正在使用 @987654324 @带有嵌入式集合视图控制器?或者您是通过代码执行此操作,而您只是使用术语 容器视图 来表示您正在创建一个
UIView并将集合视图添加为该视图的子视图?
标签: swift uiscrollview uikit