StackView中UICollectionView的动态高度

时间:2019-01-28 14:58:01

标签: ios swift uicollectionview autolayout

我试图弄清楚如何在UIStackView(或没有StackView)内为UICollectionView设置自动布局约束,并感到困惑。我发现的关于StackOverflow的其他答案似乎并不直接适用。

这是我所拥有的:

-----------------------------------
|  -----------------------------  |
|  |    UICollectionView # 1    | | (Sticky header for whole view)
|  -----------------------------  |
|  -----------------------------  |
|  |    UICollectionView # 2    | | (Table/grid with sections)
|  -----------------------------  |
|  -----------------------------  |
|  |    Button                  | |
|  -----------------------------  |
|  -----------------------------  |
|  |    UICollectionView # 3    | | (Sticky footer)
|  -----------------------------  |

我知道现在有集合视图的粘贴部分标题,但是集合2具有它自己的部分,因此这些是整个视图的粘贴标题,不存在。

我可以为视图#1,#3和按钮设置约束,但是#2的高度未知。如何设置它,以便视图可以动态更改高度,但视图#3始终可见。

即如果视图#2变得太长,它将开始滚动,并且视图#3将保持可见。

1 个答案:

答案 0 :(得分:1)

如果要使用自动调整大小的集合视图,则必须为集合视图的高度创建一个NSLayoutConstraint

@IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!

然后,在viewDidLayoutSubviews中,更新高度约束并布局视图:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    collectionViewHeightConstraint.constant = collectionView.collectionViewLayout.collectionViewContentSize.height
    view.layoutIfNeeded()
}

重新加载收藏视图时,请确保调用viewDidLayoutSubviews

collectionView.reloadData()
viewDidLayoutSubviews()