我有一个集合视图,其中的单元格根据图像方向,标签内容等动态调整大小。
这非常有效,基本上是通过下面的流程布局委托方法实现的。
extension TimelineViewController: UICollectionViewDelegateFlowLayout {
func collectionView(
_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath
) -> CGSize {
let resource = dataSource.items[indexPath.section].items[indexPath.row]
resizingCell.model = resource
let calculatedSize = resizingCell.contentView.systemLayoutSizeFitting(
UILayoutFittingCompressedSize
)
return calculatedSize
}
}
如果它有所不同,我的resizingCell
方法中定义了viewDidLoad
以上:
let identifier = String(describing: MyCell.self)
let cellNib = UINib(nibName: identifier, bundle: nil)
collectionView.register(cellNib, forCellWithReuseIdentifier: identifier)
resizingCell = cellNib.instantiate(withOwner: nil, options: nil).first as? MyCell
上面的问题是,即使在屏幕上显示之前,我的集合视图中的每个indexPath
都会调用我的委托方法。高度计算相对昂贵,当我的数据源中有超过+1000个项目时,集合视图甚至可能需要几秒钟才能显示在屏幕上。
这是预期的行为,如果不是,我能做些什么吗?如果我必须计算每个前期的大小,那就有可能破坏可重用单元的目的。
感谢您对此进行调查。