1

首先,我知道并经常使用,

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

...这个问题比那个复杂一点:-)

我有一个数据驱动的自定义 UITableViewController。根据运行时表格的定义,它会选择自定义单元格(它们本身是单独的自定义 UITableViewCell 类)。

自定义单元格也是数据驱动的,其高度仅在运行时确定。

通过进行一些运行时日志记录,我看到 UITableViewController在为可见单元格调用 cellFor... 之前为表中的所有单元格调用 heightFor... 。

这意味着我必须有效地构造一次单元格以确定高度,然后在请求时再次返回单元格。

是否可以通过 heightFor.. 返回高度的默认值,然后在知道实际高度后覆盖它?

或者是否有任何替代解决方案来避免必须构建细胞两次?

建议表示赞赏。

4

2 回答 2

1

好的,所以这里没有好的解决方案(即,一旦创建单元格,您就无法更改单元格的高度)。

所以,我在这里采用的解决方案是从 heightFor... 中调用 cellFor...,它构造单元以获得高度。然后我将该单元格的高度记录为一个属性,并从 heightFor...

获得高度后,单元格会自动释放(因为它没有保留)。当然,不久之后,UITableController 会再次请求单元格,所以它会被构造两次,但事情就是这样......

这是代码,这很好用。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    float height;

    UITableViewCell <CMyTableViewDelegate> *cell = (UITableViewCell <MyTableViewDelegate> *) [self tableView:tableView cellForRowAtIndexPath:indexPath];

    height = [cell getHeight];

    return height;
}

希望能帮助别人。

于 2012-08-21T08:17:03.837 回答
0

不,这是不可能的。再想想解决办法。我要给你一些指针。

  • 缓存计算高度
  • 检查 uitablebiewcell 本身的性能。也许它有太多的子视图。
  • 如果可能,预先计算高度 - 在表格视图的数据源要求您这样做之前执行此操作,然后返回缓存的高度
于 2012-08-17T08:43:37.780 回答