有没有办法只在垂直方向使用UICollectionViewCell的自调整大小?

问题描述 投票:0回答:1

我正在编写一个关于使用组合布局和传统流程布局与 UICollectionView 的区别的演示。

我发现如果我想要单元格的宽度等于 UICollectionView 的宽度,但单元格的高度由单元格的内容决定(仅在垂直方向上自动调整大小)。

  1. 这可以通过组合布局轻松完成
    let height = NSCollectionLayoutDimension.estimated(144)
    let itemSize = NSCollectionLayoutSize(widthDimension: NSCollectionLayoutDimension.fractionalWidth(1), heightDimension: height)
  1. 但是如果我使用传统的流程布局。我只能设置流程布局 估计的物品尺寸是这样的
    layout.estimatedItemSize = CGSizeMake(collectionView.width, 140)

但是在布局之后,cell的最终宽度将始终由实际内容决定,而不是等于collectionView的宽度。

这种仅垂直自调整大小有什么最佳实践吗?

ios uicollectionview uikit uicollectionviewlayout
1个回答
0
投票

有多种方式。一是落实

preferredLayoutAttributesFitting(_:)
:

class Cell: UICollectionViewCell {
    @IBOutlet weak var label: UILabel!

    override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
        super.preferredLayoutAttributesFitting(layoutAttributes)

        let size = CGSize(width: superview!.bounds.width - 40, height: 40)
        layoutAttributes.frame.size = contentView.systemLayoutSizeFitting(
            size,
            withHorizontalFittingPriority: .required,
            verticalFittingPriority: .defaultLow
        )
        return layoutAttributes
    }
}

结果:

collection view cells with fixed width but dynamic height

© www.soinside.com 2019 - 2024. All rights reserved.