我通过在 Xcode 中设计自己的 UITableViewCell
并将其加载到 cellForRowAtIndexPath
中来创建自定义表格。我面临滚动问题;表格滚动非常慢而且一点也不流畅。在每个单元格中我有:
- 2 或 3 个
UIImageView
,其中第三个在需要时动态添加 - 1
UILabel
- 1
UITextView
- 有些单元格可能有 2 个
UIButton
,有些单元格可能有 1 个UIButton
,而大多数单元格根本没有按钮 - 在某些单元格中,我可能会添加覆盖层
UIView
每个单元格中 ImageView 、 TextView 和按钮的大小都不同。为了防止每次滚动表格时计算大小,我将所有大小加载到 viewWillAppear 中并将它们存储在数组中,在 cellForRowAtIndexPath 中我只加载数组中的大小并将它们设置为所需的对象。
我尝试了在网络上找到的所有想法(例如加载 if(cell == nil)
正文中的图像,如图 here ,或者不将单元格出队...)但没有解决我的问题。
另一方面,我注意到聊天应用程序 WhatsApp 每个单元格使用相似数量的项目(例如,当用户收到图像时,有 2 个按钮“查看”和“转发”、图像缩略图、缩略图旁边的复选标记图像) 、日期标签、缩略图后面的气泡图像...)但滚动非常流畅。
即使表格中只有 10 个单元格,我的滚动速度也很慢。这是我的问题:
- 我是否做了一些我没有注意到的严重错误?
- 为防止缓慢滚动而应添加到自定义单元格的项目数量是否有限制?
- 有没有办法通过使用 Xcode 中的“产品”->“配置文件”之类的方法来检测滚动缓慢的原因?
- 有人能为我的问题提出解决方案吗?
提前非常感谢。
最佳答案
使用图像时 TableView 的运行缓慢通常是由于调整大小操作造成的。我制作的最后一个应用程序的图像来自网络。例如,传入的一张图像是 4k 像素 x 4k 像素图像。所有其他图像都比我试图显示的缩略图大小的图像大得多。总而言之,每次图像离开屏幕时,图像都会从 RAM 中移出并返回到闪存中,这是为了帮助保留 RAM 内存。问题是,保留在 flash 中的是您分配给 UIImageView 的原始 UIImage。 UIImage 保留原始大小的图像。因此,现在每次图像返回到屏幕上时,都必须对其原始尺寸进行调整(比您希望显示的更小或更大)。每次 4k px x 4k px 图像返回屏幕时,TableView 都会出现故障。诀窍是在将图像分配给支持 UIImageView 的 UIImage 之前,将图像的大小精确设置为您希望显示的大小。作为示例,此 TableView 一次仅显示约 10 到 12 个项目,而且速度仍然非常慢(即使在所有图像完全从网络加载之后)。
另一个潜在的缓慢。我构建了另一个应用程序,我最初希望显示的数据可以选择复制和过去。您可以使用 UITextView 对象来做到这一点。问题是我输出的值表有 17 列宽、218 行。在这种情况下,因为每个 UITextView 都有滚动功能(即使我将其关闭),导致每个 UITextView 必须重新计算它自己的 subview 显示坐标等......导致整个表格滚动非常慢。最后,如果不需要编辑或复制和粘贴数据,您实际上应该只使用 UILabel 对象来显示它。当我这样做时,我的 UITableView 的性能极大地提高了。
关于iphone - 自定义UITableView缓慢滚动: Is there a limit of number of items to add in UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071215/