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