UICollectionView为大规模集合视图中的每个部分调用高度

And*_*rew 5 objective-c ios uicollectionview uicollectionviewlayout swift

我有一个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
Run Code Online (Sandbox Code Playgroud)

我的collectionview的设置如下所示:

let collectionViewLayout = UICollectionViewFlowLayout()

self.conversationCollectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionViewLayout)
Run Code Online (Sandbox Code Playgroud)

然后我运行应用程序,并在最初加载应用程序时,在执行时insertSection(当我希望添加一个新条目时)我注意到延迟几秒钟.所以我注销了对每个委托方法的调用.

一旦应用的启动,它会调用numberOfItemsInSection,sizeForItemAtIndexPath,referenceSizeForHeaderInSectionreferenceSizeForFooterInSection,为每10000段和项目.

该项目的屏幕,这还要求cellForItemAtIndexPathviewForSupplementaryItemOfKind,这是我所期待.

那么我加入:

collectionViewLayout.estimatedItemSize = CGSize(width: 100, height: 100)
collectionViewLayout.itemSize = CGSize(width: 100, height: 100)
collectionViewLayout.headerReferenceSize = CGSizeZero
collectionViewLayout.footerReferenceSize = CGSizeZero
Run Code Online (Sandbox Code Playgroud)

但这对所做的调用没有任何影响.

理想情况下,我想要的是能够给出估计的截面尺寸,然后只有当它们即将在屏幕上显示时才调用截面和单元高度函数.