当heightForRow不是选项时,UITableViewCell的可变高度

时间:2014-02-22 18:42:58

标签: ios objective-c uitableview

我有点奇怪的情况,我有一个UITableViewCell,其标签可以有不同数量的文本。我在这里看了几个答案来解决这个问题(设置正确的单元格高度),其中很多都是这样解决的:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return [indexPath row] * //some logic that looks at the text amount and adjusts accordingly;
}

我遇到的问题是,我继承的代码库有一个高度耦合过程,其中标签的文本在cellForRowAtIndexPath中被检索,所以当heightForRowAtIndexPath是称为检索文本的对象是nil

我尝试将对象设为ivar,但是,它依赖于另一个在cellForRowAtIndexPath中实例化的数据源。

因此,假设heightForRowAtIndexPath中的UILabel文本,是否有一种解决此问题的好方法?

由于

2 个答案:

答案 0 :(得分:0)

创建一个存储每个高度的数组。最初使用一些常量值填充整个数组 当调用cellForRow并获取文本时,计算新的高度并将其存储在高度数组中。现在调用reloadData of tableView

你甚至可以在增加身高的同时使用动画。

您甚至可以使用– reloadRowsAtIndexPaths:withRowAnimation:

答案 1 :(得分:0)

当我有可变大小的单元格时,我通常发现单独实现确定大小是太痛苦了。所以我做的是在heightForRowAtIndexPath我只是调用cellForRowAtIndexPath来获取单元格,并且在那里完成配置内部元素大小的工作。

当然,这意味着我将细胞构建两次。到目前为止,当我完成它时,低效率并不是一个性能问题 - 一些可见的单元和人机交互速度。据推测,如果这是性能问题,我可以构建自己的配置单元格的小缓存。

也许这种技术对你有用。