iphone - 自定义UITableView缓慢滚动: Is there a limit of number of items to add in UITableViewCell

标签 iphone ios uitableview scroll

我通过在 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 个单元格,我的滚动速度也很慢。这是我的问题:

  1. 我是否做了一些我没有注意到的严重错误?
  2. 为防止缓慢滚动而应添加到自定义单元格的项目数量是否有限制?
  3. 有没有办法通过使用 Xcode 中的“产品”->“配置文件”之类的方法来检测滚动缓慢的原因?
  4. 有人能为我的问题提出解决方案吗?

提前非常感谢。

最佳答案

使用图像时 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/

相关文章:

iPhone:如何/是否将我现有的私钥包含在新证书中?

iphone - 不要在 Iphone SDK 的第一个登录页面显示标签栏

ios - UITableView 不显示 IOS 7 中的单元格

ios - iOS-数据库SQLite类/插件/库

swift - tableView不显示数据值

iphone - UITableView - 方法未被调用

ios - Firebase 从 iOS 上的用户取消链接电子邮件/密码身份验证

ios - 使用 WCSession 的具有自定义意图的 Siri 快捷方式

ios - 为每个新推送添加一个新的 UITableViewCell

ios - 一个 Controller 中的两个 TableView