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 但不移动单元格