我有一个带有一些标题和(各种大小的)单元格的
UICollectionView
。我遇到的问题是它看起来没有加载所有必需的单元格来填充可见区域,而是它只在我滚动一点后加载最新的单元格:
如果我删除标题,问题就消失了,这让我怀疑我的
collectionView(_:layout:referenceSizeForHeaderInSection:)
方法是罪魁祸首,但即使我返回固定大小,它仍然会出现同样的问题。
有人能帮我理解这里发生了什么吗? 这里是一个有问题的演示项目,如果有人感兴趣的话。
这条线:
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
你没有给流程布局任何提示关于项目大小。
所以,Flow Layout 本质上说:
当你开始滚动时,当前可见的单元格已经定义了它的宽度,所以 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)
}
}