自定义UITableView慢滚动:UITableViewCell中要添加的项目数量是否有限制

时间:2012-06-17 12:16:09

标签: iphone ios uitableview scroll

我正在通过在Xcode中设计我自己的UITableViewCell并在cellForRowAtIndexPath中加载来创建自定义表。我正面临滚动问题;桌子滚动真的很慢而且根本不平滑。在每个单元格中我都有:

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

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

我尝试了我在网络上找到的所有想法(例如在if(cell == nil)的正文中加载图像here,或者不对细胞进行排队......)但没有解决我的问题。

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

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

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

3 个答案:

答案 0 :(得分:1)

每个单元格有多个图像,我遇到了同样的问题。如果每个单元格都有一个,UITextView就会将其删除。还隐藏您不想显示的图像,并尝试不循环到数组中以查找是或否您应该显示或隐藏图像但是创建一个可以读取的BOOL数组

答案 1 :(得分:1)

使用图像时TableView的慢速操作是因为调整操作的大小。我制作的最后一个应用程序的图像来自网络。例如,一个进入的图像是一个4k像素×4k像素的图像。所有其他都比我试图显示的缩略图大小的图像大得多。它的长短不一样,每当图像离开屏幕时,图像就会从RAM中移出并返回闪存,这有助于保留RAM内存。问题是保留在flash中的是你分配给UIImageView的原始UIImage。 UIImage保留原始大小的图像。因此,现在每次图像重新出现在屏幕上时,都必须从其原始尺寸(比您希望显示的尺寸更小或更大)进行调整。每当4k px x 4k px图像重新出现在屏幕上时,TableView就会出现故障。诀窍是在将图像分配给支持UIImageView的UIImage之前,将图像大小调整为您希望显示的图像。作为一个示例性说明,此表格视图一次仅显示约10到12个项目,并且仍然非常慢(即使在从网络上完全加载所有图像之后)。

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

答案 2 :(得分:0)

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