Iphone 是否有更好的方法来确定UITableViewCell的正确大小?

Iphone 是否有更好的方法来确定UITableViewCell的正确大小?,iphone,cocoa-touch,uitableview,Iphone,Cocoa Touch,Uitableview,我有一个UITableView单元格,它的大小将根据其内容(可能有几行文本)而变化 由于在布局单元格之前似乎调用了heightforrowatinexpath,因此我只需在文本字符串上调用[NSString sizeWithFont]来猜测正确的高度。有没有更好的方法来设置高度,在我把文本放在单元格中,并且知道它应该是多大的时候?听起来很傻,但是……嗯。。。“在退出heightForRowAtIndexPath之前布局单元格”;) 不过,说真的——操作系统只有在需要时才会调用它(比如:它将要创建

我有一个UITableView单元格,它的大小将根据其内容(可能有几行文本)而变化


由于在布局单元格之前似乎调用了heightforrowatinexpath,因此我只需在文本字符串上调用[NSString sizeWithFont]来猜测正确的高度。有没有更好的方法来设置高度,在我把文本放在单元格中,并且知道它应该是多大的时候?

听起来很傻,但是……嗯。。。“在退出heightForRowAtIndexPath之前布局单元格”;)

不过,说真的——操作系统只有在需要时才会调用它(比如:它将要创建单元并在屏幕上显示),所以布置单元并准备显示并不是白费力气

请注意,您不必在逻辑上单独进行布局。只需在heightForRowAtIndexPath例程中调用[self-prepLayoutForCellAtIndex:index]

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

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

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

我通常使用以下方法:

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


请注意,我在表中提前预缓存了一堆行,而不是在单元格较多的表中使用此选项。然而,对于像设置表这样的东西,虽然只有几行,但很可能大小非常不同,它工作得很好。对于较大的表,我会按照Olie的建议做一些事情。

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