如何使用自定义单元格大小提高UICollectionView的性能?

Bam*_*a91 6 cocoa-touch objective-c ios uicollectionview uicollectionviewcell

当用户键入时,我通过遍历后台线程中的本地字图来检索结果(文本).每次击键都会取消之前的操作.如果操作完成,则更新数据源并在主线程上调用reloadData.即使返回了数万个结果,这也非常有效并且速度非常快(与用户可以输入的速度一样快).

为了自定义每个集合视图单元的大小,我为UICollectionViewDelegateFlowLayout委托实现了sizeForItemAtIndexPath.不幸的是,当用户输入时,这会导致一个小但明显的延迟.为了确保在我的大小计算逻辑中没有丢失时间,我尝试返回一个固定的大小,但它仍然杀死了性能.我对此感到惊讶,因为在任何给定时间屏幕上只有约120个单元格.在评论此方法时,即使对于非常大的数据集,响应时间也是立即的.

有关使用自定义单元大小提高UICollectionView性能的任何想法吗?

谢谢

补充说明......

程序返回给定字母集中的所有可能单词,然后按分数或按字母顺序排序等.当用户键入时,总字数会快速上升(如果输入多个通配符,则指数级).键入时单词会发生变化,因此单元格的宽度会相应更新并换行到流程布局处理的下一行.

问题似乎是在任何给定时间屏幕上显示的单元格数量.在sizeForItemAtIndexPath中,如果我只返回一个只有一个或两个单元格可见的大尺寸,那么更新速度非常快; 但是,如果我返回一个恰好适合文本的大小,我最终会得到100个以上的可见单元格并且存在延迟.如果我注释掉sizeForItemAtIndexPath并且只使用固定大小的单元格,那么它很快,但这不是我想要的.

Anu*_*nuj 2

您不需要UICollectionView通过调用重新加载reloadData,而是可以使用:

[self.collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
Run Code Online (Sandbox Code Playgroud)

这里,indexPath是您要更新的NSIndexPath相应对象的对象。UICollectionViewCell