两个集合视图都使用组合布局和可区分的数据源。每个外部集合视图单元都嵌入一个集合视图。
外部集合视图具有估计的组高度,即
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(300.0))
let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
每个单元格的集合视图都受单元格内容视图的前导、尾随、顶部、底部锚点的约束。IE
NSLayoutConstraint.activate([
cellView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
cellView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
cellView.topAnchor.constraint(equalTo: contentView.topAnchor),
cellView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
每个单元格的集合视图可以具有大约 50 到 800 的高度范围。
问题是如何将每个单元格调整为单元格集合视图的实际内容大小。由于部分布局不允许单独提供单元格的尺寸。
如果我们给单元格高度估计值太低,比如 50。那么单元格的集合视图只是大小为 50 并且可以垂直滚动(这是不希望的)。
如果我们给单元格高度估计过高,比如 800。那么当单元格的集合视图很小时,单元格中就会留下很大的空白。
我可以在运行时使用单元模型估计高度。但是,我很难找到使当前布局无效的位置,然后使用新的单元格高度触发重新布局。