Nun*_*ves 6 ios uicollectionviewcell swift intrinsic-content-size
我正在使用自定义布局UICollectionView.我的牢房应该有固定的宽度和灵活的高度.
细胞由a UImageView和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
Run Code Online (Sandbox Code Playgroud)
堆栈视图类似,并且确实绑定到单元格的底部.
当系统正在呼叫时 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)
Run Code Online (Sandbox Code Playgroud)
事实证明,preferredSize是使用imageView内在大小而不是遵守约束来计算的.因此,对于具有850x850的图像(以及160个宽度的单元格),我的高度比我预期的要高得多,因此底部有一个巨大空间的单元格.
我设法解决了这个问题,我觉得这是一个黑客攻击.
我创建了对图像宽度约束的引用,当我使用从layoutAttributes获得的固定值调用此方法并调用setNeedsLayout()和layoutIfNeeded()时更新它,这是有效的.但我真的不喜欢我必须再次强制布局并自己更新宽度,更不用说我的性能松动了.
如何以更好的方式完成?
非常感谢你.
你有纵横比约束吗?当存在宽高比约束时,systemLayoutSizeFitting无法正常工作.
首先,尝试在图像上设置高度约束而不是宽高比,如果有效,请在代码中设置高度约束constant = image.width*1.33
| 归档时间: |
|
| 查看次数: |
5335 次 |
| 最近记录: |