滚动时有效调整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。
我遇到了类似的问题,我需要首先加载表格单元格,然后在加载或重新加载表格后对每个单元格执行不同的操作,可能就是您要查找的内容。
干杯
您无需调用 – [UITableView reloadData]来更新单元格的几何。 您可以通过调用以下命令使UITableView重新计算单元格的几何:
// force geometry update [tableView beginUpdates]; [tableView endUpdates];
这在WWDC 2010谈话中提到- 掌握Tableviews