在垂直堆栈视图中具有自动项目大小的水平分页 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 是一个非常可行的替代方案(因为集合视图的动态特性不是必需的) .集合视图可以是嵌入到滚动视图中的堆栈,然后可以在初始化时简单地设置维度之间的包含。