具有动态大小的UICollectionView - 为每个indexPath调用布局流委托

时间:2017-10-23 06:12:29

标签: ios swift uicollectionview uicollectionviewlayout uicollectionviewdelegateflowlayout

我有一个集合视图,其中的单元格根据图像方向,标签内容等动态调整大小。

这非常有效,基本上是通过下面的流程布局委托方法实现的。

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个项目时,集合视图甚至可能需要几秒钟才能显示在屏幕上。

这是预期的行为,如果不是,我能做些什么吗?如果我必须计算每个前期的大小,那就有可能破坏可重用单元的目的。

感谢您对此进行调查。

0 个答案:

没有答案