在垂直堆栈视图中具有自动项目大小的水平分页 UICollectionView?

问题描述

我有一个主要的垂直堆栈视图(第 1 帧),它有一个带有流布局的水平分页集合视图 (CollectionView),它有几个单元格 (Cell)。每个单元格都带有几个标签标题、描述)的垂直堆栈视图。

enter image description here

enter image description here

有没有办法让最高的单元格决定集合视图的高度,而主堆栈视图的宽度决定单元格的宽度?


认情况下,当我使用 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 是一个非常可行的替代方案(因为集合视图的动态特性不是必需的)。集合视图可以是一个嵌入到滚动视图中的堆栈,然后可以在初始化时简单地设置维度之间的包含。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...