3

大概的概念

我希望在用户滚动列表时动态调整 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如果需要,我会在万不得已时重新编写自己的代码。

谢谢你的时间。

4

3 回答 3

2

经过大量测试后,UITableView我还没有找到一种有效地做到这一点的方法。似乎UITableView可以以不允许动态单元格调整大小的方式进行优化。出于这个原因,制作自定义列表系统似乎是唯一的选择。我已经开始在UIScrollView.

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

于 2012-07-25T19:51:47.943 回答
0

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

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

我有一个类似的问题,我需要先加载表格单元格,然后在加载或重新加载表格后对每个单元格执行不同的操作,这可能是您正在寻找的。

干杯

于 2012-05-11T18:36:31.633 回答
0

您不需要调用 -[UITableView reloadData] 来更新单元格的几何形状。您可以通过调用使 UITableView 重新计算单元格的几何形状:

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

这在WWDC 2010 演讲中提到 - Mastering Tableviews

于 2012-07-09T19:22:38.153 回答