滚动时有效调整UITableViewCell的大小

大概的概念

我想在用户滚动列表时动态调整UITableViewCells的大小,比如说,当项目到达列表底部时,项目的大小会增大。

注意事项

这是一个需要每秒刷新多次的过程,因为调用:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

因此,采用UITableView::ReloadData方法以便调用UITableView::ReloadData方法是不切实际的:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

因为这将需要重新加载一堆额外的数据并极大地减慢系统速度。

需求

  • 我将在屏幕上有大约10个项目。
  • 整个列表在极端情况下最多可包含100个项目。
  • 系统需要平滑滚动。
  • 当列表滚动时,项目需要实时平滑地扩展和收缩。

常识

  • 与静态项目列表相比,这肯定会产生一些性能影响。

  • 有数百个线程处理“调整cel到文本长度”的简单情况,这不是我需要的,因为这是一次性的事情,相比之下,每秒有很多周期。

可能的方法

  • 子类UITableView
  • 将一个静态UITableView嵌套在UIScrollView
  • 从头开始创建项目列表系统,根本不使用UIScrollView

废弃的方法

  • 每个周期调用UITableView::ReloadData ,以便调用heightForRowAtIndexPath :.

至今

我已经编写了一个模块来计算项目大小的数学。

结论

我正在寻找解决这个问题的最快方法,但如果需要,我会重新编写自己的UITableView作为最后的手段。

谢谢你的时间。

在使用UITableView进行大量测试后,我还没有找到一种有效的方法。 似乎UITableView可能以不允许动态单元格大小调整的方式进行优化。 因此,制作自定义列表系统似乎是唯一的选择。 我已经开始在UIScrollView上构建这样的项目了。

很大一部分基本function已经完成,但该项目目前处于暂停状态,因为我有一个更重要的系统可供开发。 如果您有兴趣参与此项目,请告诉我。

也许在uitableview委托数据表中查看tableView:willDisplayCell:forRowAtIndexPath。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html

我遇到了类似的问题,我需要首先加载表格单元格,然后在加载或重新加载表格后对每个单元格执行不同的操作,可能就是您要查找的内容。

干杯

您无需调用 – [UITableView reloadData]来更新单元格的几何。 您可以通过调用以下命令使UITableView重新计算单元格的几何:

 // force geometry update [tableView beginUpdates]; [tableView endUpdates]; 

这在WWDC 2010谈话中提到- 掌握Tableviews