我使用具有相对“重”的自定义表格视图单元格的表格视图 - 比如说单个单元格中有大约 100 个子视图(完整层次结构)。尽管如此,我已经能够实现非常平滑的滚动 - 使用标准做法,例如仅使用不透明视图、隐藏未使用的子视图(甚至从视图层次结构中删除)、预加载单元格高度等。
问题是创建单个单元实例仍然相对昂贵。由于标准 UITableView 的单元重用逻辑是如何工作的,这个问题只在特定条件下才明显。
通常在加载表格视图(并显示初始内容)时,它会创建几乎所有必需的单元格实例 - 因此,当您开始滚动时,它很少需要创建更多可重用的单元格。但是,如果由于某种原因它只在开始时显示几个单元格,那么在启动滚动时显然需要创建更多单元格。在我的情况下,如果有一个宽表视图标题或者如果第一个单元格足够大,这很明显。当您开始滚动时发生这种情况时,会有片刻的明显滞后,这显然是由创建新单元格实例引起的。没有什么丑陋但仍然引人注目,尤其是与之后的绝对平滑滚动相比。
现在,显而易见的解决方案是让单元格“更轻”——比如将它们分成不同的更具体的类型,这样每个单元格就可以包含更少的子视图。但是由于我的内容的组织方式,这将是一个非常复杂的解决方案。
所以我的问题是——有没有什么好的方法可以“欺骗”表格视图逻辑来强制加载和缓存特定数量的可重用单元格实例——尽管实际可见的单元格数量是多少?
我一直在考虑的选项之一是拥有自己的显式单元缓存,并在需要时用单元预填充它(比如在 -viewDidLoad 中)。这种方法的问题是你必须事先知道你需要的确切类型的细胞——对我来说效果不佳。改进将是在加载初始数据时构建缓存(因此至少知道内容的确切类型),但我一直想知道是否有任何简单的选项。