【问题标题】:Embed CollectionView inside CollectionViewCell with dynamic height将 CollectionView 嵌入到具有动态高度的 CollectionViewCell 中
【发布时间】:2021-03-15 12:25:29
【问题描述】:

两个集合视图都使用组合布局和可区分的数据源。每个外部集合视图单元都嵌入一个集合视图。

外部集合视图具有估计的组高度,即

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)

每个单元格的集合视图都受单元格内容视图的前导、尾随、顶部、底部锚点的约束。即

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。那么当单元格的集合视图很小时,单元格中就会留下很大的空白区域。

我可以在运行时使用细胞模型估计高度。但是,我很难找到使当前布局无效的位置,然后使用新的单元格高度触发重新布局。

【问题讨论】:

    标签: uicollectionview uicollectionviewcompositionallayout


    【解决方案1】:

    我的问题已通过这个 SO 答案解决。

    Collection View Compositional Layout with estimated height not working

    奇怪的是,单元格高度可以更新,如果如上述答案指出的那样,

    用估计的高度设置项目和组。并设置为水平布局。

    在这种情况下,单元格。

    override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes
    

    可以正确触发。这样我就可以使用单元格的集合视图的内容大小来更新单元格布局属性。

    【讨论】:

    • 你在这个 preferredLayoutAttributesFitting 方法里面写了什么代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多