我正在为UICollectionView
. 我的单元格应该有固定的宽度和灵活的高度。
单元格由 aUImageView
和 a组成UIStackView
。的UIImageView
约束如下:
image.top = cell.top
image.width = cell.width
image.height = image.width * 1.33
image.centerX = cell.centerX
image.bottom = stackView.top
堆栈视图类似,并且确实绑定到单元格的底部。
系统调用时preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
我正在执行一些计算以获取单元格的高度。
let preferredAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)
let size = CGSize(width: layoutAttributes.frame.width,
height: UILayoutFittingCompressedSize.height)
let preferredSize = systemLayoutSizeFitting(size,
withHorizontalFittingPriority: .defaultHigh,
verticalFittingPriority: .fittingSizeLevel)
事实证明,preferredSize 是使用 imageView 内在大小而不是尊重约束来计算的。因此,对于一个 850x850 的图像(以及一个宽度为 160 点的单元格),我得到的高度比我预期的要高得多,因此一个单元格的底部空间很大。
我设法用我觉得这是一个黑客的东西解决了这个问题。
我创建了对图像宽度约束的引用,当我使用从 layoutAttributes 获得的固定值调用此方法并调用 setNeedsLayout() 和 layoutIfNeeded() 时对其进行更新,这样就可以了。但我真的不喜欢我不得不再次强制布局并自己更新宽度,更不用说我失去了性能。
如何以更好的方式做到这一点?
非常感谢。