2

我正在通过UITableViewCell在 Xcode 中设计自己的表格并将其加载到cellForRowAtIndexPath. 我面临滚动问题;表格滚动真的很慢而且根本不流畅。在每个单元格中,我都有:

  • 2 或 3 UIImageView,其中第三个在需要时动态添加
  • 1UILabel
  • 1UITextView
  • 一些单元格可能有 2 UIButton,一些 1 UIButton,并且大多数根本没有按钮
  • 在某些单元格中,我可能会添加叠加层UIView

每个单元格中的图像视图、文本视图和按钮的大小都不同。为了防止每次滚动表格时计算大小,我加载所有大小viewWillAppear并将它们存储在一个数组中,在里面cellForRowAtIndexPath我只加载数组中的大小并将它们设置为所需的对象。

我尝试了我在网上找到的所有想法(比如将图像加载到此处if(cell == nil)所示的正文中,或者不将单元格出列......)但没有解决我的问题。

另一方面,我注意到聊天应用程序 WhatsApp 每个单元格使用相似数量的项目(例如,当用户收到图像时,有 2 个按钮查看和转发,图像缩略图,缩略图旁边的复选标记图像,日期标签,缩略图后面的气泡图像...)但那里的滚动非常流畅。

即使表格中只有 10 个单元格,我的滚动速度也很慢。以下是我的问题:

  1. 我是否在做一些我没有注意到的严重错误?
  2. 应添加到自定义单元格以防止缓慢滚动的项目数量是否有限制?
  3. 有没有办法通过在 Xcode 中使用 Product-> Profile 之类的东西来检测滚动缓慢的原因?
  4. 任何人都可以为我的问题提出解决方案吗?

提前谢谢了。

4

3 回答 3

1

每个单元格有多个图像,我遇到了同样的问题。如果每个单元格都有一个,UITextView 就会杀死它。还隐藏您不想显示的图像,并尝试不循环进入数组以查找是否应该显示或隐藏图像,但制作一个可以读取的 BOOL 数组

于 2012-06-17T13:08:23.800 回答
1

由于调整大小操作,使用图像时 TableView 操作缓慢是正常的。我制作的最后一个应用程序的图像来自网络。例如,进来的一张图像是 4k 像素 x 4k 像素的图像。所有其他的都比我试图显示的缩略图大小的图像大得多。总而言之,每次图像离开屏幕时,图像都会从 RAM 中移出并返回到闪存中,这是为了帮助保留 RAM 内存。问题是保留在 Flash 中的是您分配给 UIImageView 的原始 UIImage。UIImage 保留原始大小的图像。因此,现在每次图像返回屏幕时,都必须从其原始尺寸(比您希望显示的更小或更大)调整大小。每次 4k px x 4k px 图像回到屏幕上时,TableView 都会出现故障。诀窍是在将图像分配给支持 UIImageView 的 UIImage 之前,将图像的大小精确到您希望显示的大小。举个例子,这个表格视图一次只显示约 10 到 12 个项目,而且速度仍然非常慢(即使在所有图像战争完全从网络加载之后)。

另一个潜在的缓慢。我有另一个应用程序,我最初希望显示的数据可以选择用于复制和过去。您可以使用 UITextView 对象执行此操作。问题是我输出的值表是 17 列宽 218 行。在这种情况下,因为每个 UITextView 都具有滚动功能(即使我将其关闭)导致每个 UITextView 必须重新计算它自己的子视图显示坐标等......导致整个表格滚动非常缓慢。最后,如果数据不需要编辑,或者复制和粘贴,你真的应该只用 UILabel 对象显示它。当我这样做时,我的 UITableView 的性能大大提高了。

于 2012-06-17T14:44:19.090 回答
0

试试这个: -webkit-overflow-scrolling: touch; 取自这里: http ://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/

于 2014-01-08T15:53:59.460 回答