uicollectionview - 将 CollectionView 嵌入到具有动态高度的 CollectionViewCell 中
问题描述
两个集合视图都使用组合布局和可区分的数据源。每个外部集合视图单元都嵌入一个集合视图。
外部集合视图具有估计的组高度,即
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。那么当单元格的集合视图很小时,单元格中就会留下很大的空白。
我可以在运行时使用单元模型估计高度。但是,我很难找到使当前布局无效的位置,然后使用新的单元格高度触发重新布局。
解决方案
我的问题由这个 SO 答案解决。
奇怪的是,如果如上述答案指出的那样,单元格高度可以更新,
用估计的高度设置项目和组。并设置为水平布局。
在这种情况下,细胞。
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes
可以正确触发。这样我就可以使用单元格的集合视图的内容大小来更新单元格布局属性。
推荐阅读
- android - java.net.SocketTimeoutException:无法连接改造 kotlin
- python - 尝试在 python 中绘制图形会导致错误
- java - 对于这个星号条形图java程序,有更简单的方法吗?
- java - 将状态码放入 Java 接口
- c# - NavigationManager.StartNavigation 返回 INVALID_PARAMETERS
- haskell - 将 foldl 与 ++ 一起使用时,约束错误中的非类型变量参数
- java - 如何在 GWT 中将 JSONObject 转换为 .csv?
- javascript - 如何在不知道字符串内容的情况下将 html 字符串解析为实际的 jsx 代码?
- javascript - 从 n 到 m 的偶数之和,无论是否为 n
米 - python - 处理 CSV 单元格值中的逗号和引号