UICollectionView 不加载所有可见的单元格

问题描述 投票:0回答:1

我有一个带有一些标题和(各种大小的)单元格的

UICollectionView
。我遇到的问题是它看起来没有加载所有必需的单元格来填充可见区域,而是它只在我滚动一点后加载最新的单元格:

如果我删除标题,问题就消失了,这让我怀疑我的

collectionView(_:layout:referenceSizeForHeaderInSection:)
方法是罪魁祸首,但即使我返回固定大小,它仍然会出现同样的问题。

有人能帮我理解这里发生了什么吗? 这里是一个有问题的演示项目,如果有人感兴趣的话。

ios swift uicollectionview autolayout
1个回答
0
投票

这条线:

flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize

你没有给流程布局任何提示关于项目大小。

所以,Flow Layout 本质上说:

  • 我需要另一“排”细胞
  • 单元格可能与集合视图一样宽
  • 所以,只需要一个 cell

当你开始滚动时,当前可见的单元格已经定义了它的宽度,所以 Flow Layout 要求另一个单元格。

您可以提供实际的估计项目大小,或覆盖

viewDidAppear()
并在那里进行:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if let fl = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        // let's use estimated width of 40% so we know we can fit 2 cells per row
        //  use a "reasonable" value for the height
        fl.estimatedItemSize = .init(width: collectionView.frame.width * 0.4, height: 280.0)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.