我正在编写一个关于使用组合布局和传统流程布局与 UICollectionView 的区别的演示。
我发现如果我想要单元格的宽度等于 UICollectionView 的宽度,但单元格的高度由单元格的内容决定(仅在垂直方向上自动调整大小)。
let height = NSCollectionLayoutDimension.estimated(144)
let itemSize = NSCollectionLayoutSize(widthDimension: NSCollectionLayoutDimension.fractionalWidth(1), heightDimension: height)
layout.estimatedItemSize = CGSizeMake(collectionView.width, 140)
但是在布局之后,cell的最终宽度将始终由实际内容决定,而不是等于collectionView的宽度。
这种仅垂直自调整大小有什么最佳实践吗?
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
}
}
结果: