有没有更好的方法来确定UITableViewCell的正确大小?

时间:2008-11-07 16:14:28

标签: iphone cocoa-touch uitableview

我有一个UITableView单元格,根据其内容(可能是几行文本)将具有可变大小。

似乎在我布置单元格之前,之前看到heightForRowAtIndexPath被称为,我只是通过在我的文本字符串上调用[NSString sizeWithFont]来猜测正确的高度。 之后是否有更好的方法来设置高度我已经在单元格中布置了文本,并且知道它应该具有多大的尺寸?

3 个答案:

答案 0 :(得分:8)

这听起来很愚蠢,但是......呃......“在退出heightForRowAtIndexPath之前布置你的单元格”;)

但是,严重的是,操作系统只会在需要它时调用它(例如:它即将创建单元并在屏幕上显示它),因此将其放置在屏幕上。准备好展示不是浪费精力。

注意,必须单独进行布局,逻辑方面。只需在heightForRowAtIndexPath例程中调用[self prepLayoutForCellAtIndex:index]。

如果数据是静态的,您可以创建高度表并缓存信息。

if (0 == heightTable[index]) {
    heightTable[index] = [self prepLayoutForCellAtIndex:index];
}
return (heightTable[index]);

哎呀,即使数据发生变化,您也可以在更改数据的方法中重新计算表值,或者清除为0,以便在下次需要时重新计算。

答案 1 :(得分:4)

我通常使用以下内容:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath];
return cell.bounds.size.height;

}

请注意,我将此用于提前预先缓存一堆行的表,而不是那些具有大量单元格的行。但是,对于像“设置”表这样的东西,只有几行,但很可能大小不同,它运行良好。对于较大的表格,我会按照Olie建议的方式做一些事情。

答案 2 :(得分:0)

如果以SMS.app为例,Apple会在SMS.app sqlite数据库中保存单元格的行高。