当用户键入时,我通过在后台线程中遍历本地单词图来检索结果(文本)。每次击键都会取消之前的操作。如果操作完成,则更新数据源并在主线程上调用 reloadData。即使返回数以万计的结果,这也很有效并且速度非常快(用户可以键入的速度一样快)。
为了自定义每个集合视图单元格的大小,我为 UICollectionViewDelegateFlowLayout 委托实现了 sizeForItemAtIndexPath。不幸的是,这会导致用户键入时出现很小但明显的延迟。为了确保在我的大小计算逻辑中没有丢失时间,我尝试只返回一个固定大小,但它仍然会影响性能。我对此感到惊讶,因为在任何给定时间,屏幕上只有大约 120 个单元格。当注释掉这个方法时,响应时间又是立即的,即使对于非常大的数据集也是如此。
有什么想法可以通过自定义单元格大小来提高 UICollectionView 的性能吗?
谢谢
补充说明...
该程序从给定的字母集中返回所有可能的单词,然后按分数或字母顺序等排序。当用户键入时,总字数迅速增加(如果输入多个通配符,则呈指数增长)。键入时单词会发生变化,因此单元格的宽度会相应更新,并按照流布局处理的方式换行到下一行。
问题似乎是在任何给定时间屏幕上显示的单元格数量。在 sizeForItemAtIndexPath 中,如果我只是返回一个大尺寸,其中只有一两个单元格可见,则更新非常快;但是,如果我返回一个刚好适合文本的大小,我最终会得到 100 多个可见单元格并且会有延迟。如果我注释掉 sizeForItemAtIndexPath 并只使用固定大小的单元格,它会很快,但这不是我想要的。