滚动时有效调整UITableViewCell的大小

时间:2012-05-11 17:20:42

标签: iphone ios uitableview real-time

一般理念

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

考虑

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

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

因此采用UITableView::ReloadData方法进行调用是不切实际的:

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

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

需要

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

常识

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

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

可能的方法

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

弃用方法

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

到目前为止

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

结论

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

感谢您的时间。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

干杯

答案 2 :(得分:0)

您无需调用 - [UITableView reloadData]来更新单元格的几何图形。您可以通过调用:

使UITableView重新计算单元格的几何
// force geometry update
[tableView beginUpdates];
[tableView endUpdates];

WWDC 2010 talk - Mastering Tableviews

中提到了这一点