Ios UICollectionView为海量集合视图中的每个部分调用高度

Ios UICollectionView为海量集合视图中的每个部分调用高度,ios,objective-c,swift,uicollectionview,uicollectionviewlayout,Ios,Objective C,Swift,Uicollectionview,Uicollectionviewlayout,我有一个UICollectionView,使用UICollectionViewFlowLayout作为其“布局”。它由核心数据查询的结果数组支持,其中包含10000个样本数据项,以测试其在这种情况下的性能。每个项目都有自己的部分,允许我将标题附加到顶部,未来版本中的某些项目需要在其部分中添加单元格,因此这是一个很好的设置 我实现了以下UICollectionViewFlowDelegate和UICollectionViewDataSource函数: func numberOfSectionsIn

我有一个UICollectionView,使用UICollectionViewFlowLayout作为其“布局”。它由核心数据查询的结果数组支持,其中包含10000个样本数据项,以测试其在这种情况下的性能。每个项目都有自己的部分,允许我将标题附加到顶部,未来版本中的某些项目需要在其部分中添加单元格,因此这是一个很好的设置

我实现了以下UICollectionViewFlowDelegate和UICollectionViewDataSource函数:

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
my collectionview的设置如下所示:

let collectionViewLayout = UICollectionViewFlowLayout()

self.conversationCollectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionViewLayout)
因此,我运行应用程序,在最初加载应用程序时,在执行
insertSection
(当我希望添加一个新条目时)时,我注意到延迟了几秒钟。因此,我注销了对每个委托方法的调用

在应用程序启动时,它会调用
numberofitemsinssection
sizeforritedindepath
ReferenceSizeForFooterInstruction
referenceSizeForFooterInSection
,用于10000个部分和项目中的每一个

在屏幕上的项目中,它还额外调用了
cellForItemAtIndexPath
viewForSupplementaryItemOfKind
,这是我所期望的

然后我加上:

collectionViewLayout.estimatedItemSize = CGSize(width: 100, height: 100)
collectionViewLayout.itemSize = CGSize(width: 100, height: 100)
collectionViewLayout.headerReferenceSize = CGSizeZero
collectionViewLayout.footerReferenceSize = CGSizeZero
但这对所拨打的电话没有影响


理想情况下,我想要的是能够给出一个估计的节大小,然后只有当节和单元格高度函数即将显示在屏幕上时才调用它们。

在哪里添加带有
collectionViewLayout的行?如果在集合视图完成布局后添加它们,则不会刷新布局。如果是这种情况,您必须执行
collectionViewLayout.invalidateLayout()
(或者更好的做法是,在
init
)中设置这些属性。在使用该布局初始化集合视图之前,我会将这些属性添加到集合视图布局中。您好@Andrew-您有没有找到解决方法?我遇到了同样的问题(显示了一个UICollectionView,其中包含数千项的分段数据源,每个部分调用numberOfItemsInSection一次),我正在寻找尽可能多的信息!