StackView 中 UICollectionView 的动态高度
Dynamic height for UICollectionView inside StackView
我正在尝试弄清楚如何为 UIStackView(或没有 StackView)内的 UICollectionView 设置 AutoLayout 约束,但感到困惑。我在 Whosebug 上找到的其他答案似乎并不直接适用。
这是我的资料:
-----------------------------------
| ----------------------------- |
| | UICollectionView # 1 | | (Sticky header for whole view)
| ----------------------------- |
| ----------------------------- |
| | UICollectionView # 2 | | (Table/grid with sections)
| ----------------------------- |
| ----------------------------- |
| | Button | |
| ----------------------------- |
| ----------------------------- |
| | UICollectionView # 3 | | (Sticky footer)
| ----------------------------- |
我知道 collection 视图现在有固定部分 headers,但是 collection #2 有它自己的部分,所以这些是固定的 headers整个视图,不存在。
我可以为视图#1、#3 和按钮设置约束,但#2 的高度未知。如何设置它以便视图可以动态更改高度,但视图 #3 始终可见。
即如果视图 #2 变得太长,它将开始滚动,而视图 #3 将保持可见。
如果你想要一个自动调整大小的集合视图,你必须为集合视图的高度创建一个NSLayoutConstraint
:
@IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!
然后,在viewDidLayoutSubviews
中,更新高度约束并布局视图:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionViewHeightConstraint.constant = collectionView.collectionViewLayout.collectionViewContentSize.height
view.layoutIfNeeded()
}
重新加载集合视图时,请务必调用 viewDidLayoutSubviews
:
collectionView.reloadData()
viewDidLayoutSubviews()
我正在尝试弄清楚如何为 UIStackView(或没有 StackView)内的 UICollectionView 设置 AutoLayout 约束,但感到困惑。我在 Whosebug 上找到的其他答案似乎并不直接适用。
这是我的资料:
-----------------------------------
| ----------------------------- |
| | UICollectionView # 1 | | (Sticky header for whole view)
| ----------------------------- |
| ----------------------------- |
| | UICollectionView # 2 | | (Table/grid with sections)
| ----------------------------- |
| ----------------------------- |
| | Button | |
| ----------------------------- |
| ----------------------------- |
| | UICollectionView # 3 | | (Sticky footer)
| ----------------------------- |
我知道 collection 视图现在有固定部分 headers,但是 collection #2 有它自己的部分,所以这些是固定的 headers整个视图,不存在。
我可以为视图#1、#3 和按钮设置约束,但#2 的高度未知。如何设置它以便视图可以动态更改高度,但视图 #3 始终可见。
即如果视图 #2 变得太长,它将开始滚动,而视图 #3 将保持可见。
如果你想要一个自动调整大小的集合视图,你必须为集合视图的高度创建一个NSLayoutConstraint
:
@IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!
然后,在viewDidLayoutSubviews
中,更新高度约束并布局视图:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionViewHeightConstraint.constant = collectionView.collectionViewLayout.collectionViewContentSize.height
view.layoutIfNeeded()
}
重新加载集合视图时,请务必调用 viewDidLayoutSubviews
:
collectionView.reloadData()
viewDidLayoutSubviews()