0

我知道 cellForRowAtIndexPath 只加载可见单元格。有没有办法强制它加载它下方和上方的 3 个单元格?

4

2 回答 2

3

不,cellForRowAtIndexPath只加载当前单元格。

您的问题表明您正在做的事情在您的cellForRowAtIndexPath. 例如,您可能正在对图像进行延迟加载,但还想“预取”候选“下一个”单元格所需的一些图像,以减少用户对延迟加载的体验。但是,一般来说,您实际上不会预取UITableViewCell对象本身,而只是预取这些单元格需要的数据片段。

您可能需要向我们提供更多关于您认为需要预取哪些内容的信息,我们可以提供更好的建议。这是一个重要的问题,在某种程度上取决于您的控制器在呈现视图时使用的精心设计的模型。您可能想要分享一些关于您的模型以及您想要确保前三个和后三个单元格可用的东西的性质。

于 2012-11-28T20:07:59.803 回答
1

UITableViews 通常会自己处理决定何时加载特定单元格的整个过程。它们会自动从中删除不可见的单元格,有时将这些单元格存储在内部可重用队列中。

UITableView 提供了一种机制,可用于通过在可用时检索预先分配的单元格来加快单元格创建过程。如果您正确使用此方法,您的表格视图中的滚动速度应该不会有问题。为此,您需要在创建时为单元格配置 reusabilityIdentifier,并-[UITableView dequeueReusableCellWithIdentifier:]在实现中需要新单元格时调用该方法cellForRowAtIndexPath:

如果您仍然需要更快的速度,拥有自己的可重用和预配置单元队列应该是可行的 - 尽管您可以从实现这样的东西中获得的优势还有待观察(您将有更多的行可供使用,但是cellForRowAtIndexPath:对于被请求的单元格也会减慢)。您还需要非常小心,不要与 UITableView 的标准队列发生冲突。

查看Apple 的 UITableView 参考以获取有关可重用性机制的更多信息。

于 2012-11-28T21:06:33.720 回答