根据行数计算单元格高度?

时间:2010-10-04 22:06:53

标签: iphone objective-c uitableview uilabel row-height

我想使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath制作自定义UITableViewCell高度。

我试图通过将UITableViewCell中的行数乘以每行的高度然后为字幕添加textLabel来获取10.0f的高度。我使用以下代码并获取exc_bad_access()。为什么呢?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return ([[[tableView cellForRowAtIndexPath:indexPath] textLabel] numberOfLines] * [[[[tableView cellForRowAtIndexPath:indexPath] textLabel] font] lineHeight]) + 10.0;
    //return kRowHeightiPod; //A constant value for a sanity check
}

2 个答案:

答案 0 :(得分:4)

在获得单元格之前,您需要计算它的高度。你刚刚计算它的高度依赖于获取细胞。你已经创建了一个无限递归。

您可能需要找到另一种方法来进行计算,可能是通过检查您要添加到表格单元格的数据,而不是直接查询表格单元格。

另请注意,numberOfLines表示文本标签能够显示的行数,但如果内容不足,则可能显示的行数较少。换句话说,即使它只显示一行文本,如果这是文本标签能够显示的最大行数,numberOfLines将返回两行。

您可能需要使用其中一个NSString UIKit additions来计算要在单元格中显示的文本文本的高度。

答案 1 :(得分:0)

您是否在标签上设置了行数?因为这会给你一个默认答案,而不是与你正在使用的文字相匹配的行数......

我认为最可能的崩溃原因与textLabel有关。尝试在可执行文件的环境变量中将NSZombieEnabled设置为YES,并且日志将告诉您在释放后调用的对象类型...