我知道cellForRowAtIndexPath只加载可见的单元格。有没有办法强迫它加载它下方和上方的3个单元格?
答案 0 :(得分:3)
不,cellForRowAtIndexPath
仅加载当前单元格。
您的问题表明,您正在做cellForRowAtIndexPath
计算成本高或速度慢的事情。例如,您可能正在进行延迟加载图像,但也希望“预取”候选“下一个”单元格所需的一些图像,以减少用户对延迟加载的体验。但是,一般情况下,您实际上不会预取UITableViewCell
个对象本身,而只是预取这些单元所需的数据。
您可能需要向我们提供有关您认为需要预取的内容的更多信息,我们可以提供更好的建议。这是一个非常重要的问题,在某种程度上取决于控制器在呈现视图时使用精心设计的模型。您可能希望分享一些关于您的模型以及您希望确保在前三个和下三个单元格中的内容的性质。
答案 1 :(得分:1)
UITableViews通常会关注决定何时加载特定单元格的整个过程。它们会自动从中删除不可见的单元格,有时会将这些单元格存储在内部可重用性队列中。
UITableView提供了一种机制,您可以通过在可用时检索预先分配的单元格来加速单元创建过程。如果您正确使用此方法,则表格视图中的滚动速度应该没有问题。为此,您需要在创建时为单元配置reusabilityIdentifier,并在-[UITableView dequeueReusableCellWithIdentifier:]
实现中需要新单元时调用方法cellForRowAtIndexPath:
。
如果您仍然需要更高的速度,那么拥有自己的可重用和预配置单元格队列应该是可行的 - 尽管您可以从实现这样的东西中获得的优势还有待观察(您可以准备更多行使用,但也会减慢cellForRowAtIndexPath:
请求的单元格。您还需要非常小心,不要与UITableView的标准队列冲突。
查看Apple's UITableView reference以获取有关可重用性机制的更多信息。