组合布局中的集合视图自调整单元格问题
Collection view self-sizing cells issue in Compositional layout
我正在使用集合视图组合布局来显示带有两个标签的单元格,这两个标签的高度可以增加,具体取决于标签的内容。单元格中的其他所有内容都是固定的。
我做了一个这样的部分:
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)
问题是,它要么太大,要么太小,但从未计算出正确的高度。
我的假设是,这是因为我在 configure
方法中设置标签的文本,而不是在单元格初始化期间。
let cell = collectionView.dequeueReusableCell(
reusableCell: MyCustomCell.self,
indexPath: indexPath)
cell.configure(viewModel: viewModel)
有什么办法可以解决吗?我尝试使布局无效或重新加载数据以重新计算高度,但没有帮助。
由于标签位于项目上并且项目是确定组大小的标签,因此您需要在项目上设置 .estimated
高度尺寸,如果您只计划每组有一个项目,那么该组的高度尺寸将与该项目相同。所以在这种情况下,项目和组都应该有 .estimated(300)
。您当前的代码基本上是在说:使项目与我们估计的组高 300pt 一样高,但该组无法知道它的高度,因此您最终得到了错误的布局。通常,您只想对嵌套在具有绝对或分数维度(沿给定轴)的组中的项目使用分数维度以避免这种情况。
我正在使用集合视图组合布局来显示带有两个标签的单元格,这两个标签的高度可以增加,具体取决于标签的内容。单元格中的其他所有内容都是固定的。
我做了一个这样的部分:
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)
问题是,它要么太大,要么太小,但从未计算出正确的高度。
我的假设是,这是因为我在 configure
方法中设置标签的文本,而不是在单元格初始化期间。
let cell = collectionView.dequeueReusableCell(
reusableCell: MyCustomCell.self,
indexPath: indexPath)
cell.configure(viewModel: viewModel)
有什么办法可以解决吗?我尝试使布局无效或重新加载数据以重新计算高度,但没有帮助。
由于标签位于项目上并且项目是确定组大小的标签,因此您需要在项目上设置 .estimated
高度尺寸,如果您只计划每组有一个项目,那么该组的高度尺寸将与该项目相同。所以在这种情况下,项目和组都应该有 .estimated(300)
。您当前的代码基本上是在说:使项目与我们估计的组高 300pt 一样高,但该组无法知道它的高度,因此您最终得到了错误的布局。通常,您只想对嵌套在具有绝对或分数维度(沿给定轴)的组中的项目使用分数维度以避免这种情况。