在我的应用程序中,我使用FlowLayout(垂直)的UICollectionView。在收集单元格中,我有标题用于标题,textView用于内容。内容长度可以变化,短或长。我需要实现cell的autoresizing。在我的CustomCell类中,我重写了这个方法:
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
let attributes = layoutAttributes.copy() as! UICollectionViewLayoutAttributes
let desiredHeight = systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
attributes.frame.size.height = desiredHeight
return attributes
}
在ViewDidLoad()的ViewController类中我写了这个:
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = CGSize(width: view.frame.width, height: 120)
}
app运行时没有任何错误,但是仅在滚动后才调整单元格大小,而不是在屏幕上显示视图时。有什么问题需要解决吗?
滚动前滚动后
答案 0 :(得分:0)
我相信您有更新约束问题,这就是为什么当您滚动内容时,您已经更新了约束并获得了正确的高度。在调用systemLayoutSizeFitting(UILayoutFittingCompressedSize)之前。你应该调用layoutIfNeeded()