好的,我正在实现一个类似于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,...”下)
答案 0 :(得分:1)
好的-这太疯狂了。我们发现造成延迟的原因完全是因为控制台的打印输出过多。我们删除了它们,一切都变得顺利了。 这不是我的问题的直接答案,但让我理解-当您认为需要预加载nib文件以提高平滑度时-实现中的其他原因是造成延迟的原因,您应该找到它而不是通过破解来解决它。