问题描述
我有一个主要的垂直堆栈视图(第 1 帧),它有一个带有流布局的水平分页集合视图 (CollectionView),它有几个单元格 (Cell)。每个单元格都带有几个标签(标题、描述)的垂直堆栈视图。
有没有办法让最高的单元格决定集合视图的高度,而主堆栈视图的宽度决定单元格的宽度?
默认情况下,当我使用 layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
时,集合视图不可见(似乎它不会“继承”单元格的高度)。
目前,我通过为集合视图设置固定高度来解决这个问题,并在 collectionView(_:layout:sizeforItemAt:)
中手动定义项目大小(并且单元格是灵活的)。
解决方法
由于 CollectionViews(和 TableViews)没有 intrinsicContentSize
,如果没有适当的约束,布局引擎就无法知道您的集合的正确大小。需要一个子类来提供此属性。
在您的子类中:
override var intrinsicContentSize: CGSize {
return CGSize(self.contentSize.height,self.superview!.bounds.width)
}
另外,不要忘记在重新加载数据时使您的内容大小无效:
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
有关内在内容大小的更详细说明,请查看 Apple 的 Documentation
,由于内容是静态的,我认为 在这里简单地使用 UIScrollView
是一个非常可行的替代方案(因为集合视图的动态特性不是必需的)。集合视图可以是一个嵌入到滚动视图中的堆栈,然后可以在初始化时简单地设置维度之间的包含。