UITableView - 当它们离开屏幕时不要卸载单元格

Posted

技术标签:

【中文标题】UITableView - 当它们离开屏幕时不要卸载单元格【英文标题】:UITableView - don't unload cells when they go off screen 【发布时间】:2010-10-13 23:28:39 【问题描述】:

我的 tableView 由 5-10 个单元格组成,每个单元格都包含一个图像滚动视图。问题是当单元格离开屏幕时,它会删除所有图像,然后在单元格返回屏幕时重新加载它们。我知道这样做是出于性能原因,但在这种情况下,它看起来很糟糕。有没有办法防止单元格离开屏幕时卸载?

【问题讨论】:

【参考方案1】:

是的,当然。一般策略是自己预加载所有UITableViewCell 对象。您可以在viewDidLoad 中执行此操作,然后在viewDidUnload 中卸载它们,将它们存储在NSMutableArray 中,然后在tableView:cellForRowAtIndexPath: 的实现中引用数组中的适当索引。

【讨论】:

@sol 注意内存使用;如果预加载所有单元格导致需要过多的内存,则您的应用程序可能会开始出现问题。请务必在更改前后使用 Instruments 测量您的应用的内存使用情况,以确保您的内存占用保持合理。【参考方案2】:

你应该有一个很好的理由不按照 Apple 的方式做事。有 5-10 个单元格,听起来你没有充分的理由。也许您可以使用 NSOperationQueue 中的后台线程来改善单元格的加载。

这篇文章可能会有所帮助:

https://***.com/questions/1408997/dynamic-uiimage-content-loading-in-uitableview-code

【讨论】:

好吧,想象一排高 200px 的 iPad 屏幕上有 10 张图像。当该行几乎没有离开屏幕底部时看起来很荒谬,所有图像都消失了,然后当该行移回屏幕上时重新出现(它们是从服务器重新加载的)。 NSOperationQueue(单数)不是适合这项工作的工具,这里 在这里缓存图像听起来很明智。【参考方案3】:

感谢您的补充说明。这很有帮助。通过根据 uitaleviewcells 的高度计算 uitableview 的高度,您可以避免遇到的问题,而无需禁用可重用单元格。此外,如果您从网络重新加载单元格,您肯定会从一些缓存中受益,如前所述。

【讨论】:

以上是关于UITableView - 当它们离开屏幕时不要卸载单元格的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 没有正确地为在屏幕外重新排序的单元格设置动画

到达屏幕结束时在 UITableView 自定义单元格中包装文本(Swift)

当单元格即将离开屏幕时,UICollectionView Cell 的阴影突然消失

UITableView 与 NSFetchedResultsController reloadData 但不移动单元格

当 SuperViews 约束改变时更新 SubView 约束

UITableview 单元格子视图的高度比单元格大