组合布局中集合视图自调整单元格大小问题

ann*_*mph 4 ios autolayout uicollectionview swift uicollectionviewcompositionallayout

我正在使用集合视图组合布局来显示带有两个标签的单元格,这些标签的高度可以根据标签的内容而增长。细胞中的其他一切都是固定的。
我做了一个这样的部分:

let item = NSCollectionLayoutItem(
            layoutSize: NSCollectionLayoutSize(
                widthDimension: .fractionalWidth(1),
                heightDimension: .fractionalHeight(1)))

let group = NSCollectionLayoutGroup.vertical(
            layoutSize: NSCollectionLayoutSize(
                widthDimension: .fractionalWidth(1),
                heightDimension: .estimated(300)),
            subitems: [item])

let section = NSCollectionLayoutSection(group: group)
Run Code Online (Sandbox Code Playgroud)

问题是,它要么太大,要么太小,但永远不会计算出正确的高度。我的假设是,这是因为我在方法内设置标签的文本configure,而不是在单元初始化期间设置。

let cell = collectionView.dequeueReusableCell(
                reusableCell: MyCustomCell.self,
                indexPath: indexPath)
cell.configure(viewModel: viewModel)
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以解决它吗?我尝试使布局无效或重新加载数据以重新计算高度,但没有帮助。

Lal*_*alo 6

由于标签位于项目上,并且项目是决定组大小的项目,因此您需要.estimated在项目上有一个高度尺寸,如果您只计划每组只有一个项目,那么该组的高度尺寸将是相同的作为项目。所以在这种情况下,项目和组都应该有.estimated(300)。您当前的代码基本上是说:使项目与我们估计为 300pt 高的组一样高,但随后该组无法知道它的高度,因此您最终会得到错误的布局。通常,您只想对嵌套在具有绝对或分数尺寸(沿给定轴)的组中的项目使用分数尺寸以避免这种情况。