由于第一次双端队列比较滞后,我该如何在需要之前使UICollectionViewCells双端队列

时间:2018-08-28 09:29:37

标签: swift uicollectionview

好的,我正在实现一个类似于Apple的Calendar应用程序的日历。 UICollectionView中有许多类型的单元格。 我有用于垂直线的单元格,用于水平线的单元格,用于现在线的单元格和用于事件的单元格。

每当我滚动并第一次出现一个单元格时,都会出现一些小故障,滞后,延迟,但是要命名。

作为POC,我创建了这个测试用例: 创建2天。其中一个从00:00到05:00有5个事件,从17:00到22:00有5个事件。第二天从17:00到22:00只有5个事件。 滚动到17:00-22:00事件的第一天也有早上的事件,不会延迟。第二个确实。

此外,行单元格完全没有滞后,因为它们出现在collectionView的每一帧中。

这引出了我的问题-我想在滚动之前使单元出队-因此我知道屏幕上不存在的单元(一旦用户滚动就会出局)的单元数量用户滚动后,collectionView可以有效地重用它们。

我不确定这种幼稚的方法会是这样的:

ViewDidLoad()

运行以下命令:

(0...10).forEach { num in
    calendarCollectionView.dequeueReusableCell(withReuseIdentifier: "UserEventCollectionViewCell", for: IndexPath(item: num, section: 3)) //3 is my events section
}

这会导致崩溃:

Thread 1: EXC_BAD_ACCESS (code=1, address=0xae106)

我该如何实现?还是有更好的方法?

某些场景:

在屏幕截图中-带有行和小时的区域是一个包含的VC,与问题相关(在标签“ monday,...”下)

this area doesn't lag

this area lags

1 个答案:

答案 0 :(得分:1)

好的-这太疯狂了。我们发现造成延迟的原因完全是因为控制台的打印输出过多。我们删除了它们,一切都变得顺利了。 这不是我的问题的直接答案,但让我理解-当您认为需要预加载nib文件以提高平滑度时-实现中的其他原因是造成延迟的原因,您应该找到它而不是通过破解来解决它。