我已经在SO上发现了几个关于UICollectionView滚动滞后的帖子,但是大多数都处理了图像,我的情况有点不同而且更基本。
我有一个uicollectionview显示当前年份,过去一年和下一年(所以36个部分,每个部分x天数)。所有这些都在视图的负载上进行了整理,并且与我的方式相当快。
然而,问题是,在uicollectionview中发生的初始滚动有一个非常轻微但明显的延迟,然后在那之后,一切都是黄油。func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!
{
let day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell
所以你可以在这里看到,我有一个自定义单元格,我正如上面那样访问它。如果我在当月,那么上述被称为31次(或者那个月有多少天)。
即使我在上面的代码中注释掉了所有内容(并且只是'天',没有其他代码,它仍然落后。)
我尝试过的其他事情:
所以我读到的一件事是,我每次都会重新加载单元格,这会造成初始延迟?
let day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell
有人写道,你需要让它成为一个单例并停止重新实例化,而是一次又一次地访问同一个。真的吗?我看不到任何实际执行此操作的代码。我试过这样的事情:
if (day == nil)
{
day = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CalendarDayCollectionViewCell
}
并在顶部宣布了一个初始零值,但这只会导致我的应用冻结并变得无法响应。
有人可以提出其他想法吗? 请记住,诸如“你可能正在获取图像,或者一些长时间运行的数据库调用等”之类的想法并没有发生 - 我删除了所有代码,因此应用程序现在甚至都没有做任何事情,而且还有一个非常轻微,比如1/4秒之前的延迟。
如果我把所有代码都放回去,它仍然会做同样的事情(初始滞后,然后一切都变黄)。
有任何想法/建议吗?
非常感谢!