我有一个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
我的collectionview的设置如下:
let collectionViewLayout = UICollectionViewFlowLayout()
self.conversationCollectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionViewLayout)
然后我运行应用程序,在最初加载应用程序时,和在执行insertSection
时(当我希望添加一个新条目时)我注意到有几个延迟秒。所以我注销了对每个委托方法的调用。
应用启动后,它会针对10000个部分和项目中的每一个调用numberOfItemsInSection
,sizeForItemAtIndexPath
,referenceSizeForHeaderInSection
和referenceSizeForFooterInSection
。
在屏幕上的项目中,它还会调用cellForItemAtIndexPath
和viewForSupplementaryItemOfKind
,这是我期望的。
然后我加入:
collectionViewLayout.estimatedItemSize = CGSize(width: 100, height: 100)
collectionViewLayout.itemSize = CGSize(width: 100, height: 100)
collectionViewLayout.headerReferenceSize = CGSizeZero
collectionViewLayout.footerReferenceSize = CGSizeZero
但这对所做的调用没有任何影响。
理想情况下,我想要的是能够给出估计的截面尺寸,然后只有当它们即将在屏幕上显示时才调用截面和单元高度函数。