设置UITableViewCell的正确高度

时间:2011-11-18 17:48:30

标签: objective-c ios uitableview

我正在尝试在detailTextLabel委托方法中返回heightForRowAtIndexPath的高度。这样我的表格视图单元格应该与我的detailTextLabel高度相同。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *text = cell.detailTextLabel.text;
    CGSize size = cell.detailTextLabel.bounds.size;
    UIFont *font = cell.detailTextLabel.font;

    CGSize labelSize = [text sizeWithFont:font                           
                        constrainedToSize:size
                            lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height;
}

但是我在下一行收到EXC_BAD_ACCESS

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

上面这段代码的错误?

2 个答案:

答案 0 :(得分:2)

这个

 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

应该是

 UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

但这会导致多次调用tableView:cellForRowAtIndexPath:,更好的方法:编写一个帮助方法,计算每个indexPath的高度,从tableView:heightForRowAtIndexPath:tableView:cellForRowAtIndexPath:调用它,保存heigh在字典中保存高度,其中indexpathes为键,仅计算高度,id不存在indexPath(或者某些需要重新计算的内容)。返回高度。

答案 1 :(得分:2)

问题是在heightForRowAtIndexPath之前调用cellForRowAtIndexPath。因此尚未创建单元格。

如果所有行都具有相同的高度,则可以为表指定公共高度。在viewDidLoad中,您只需说self.tableView.rowHeight = ABC;您也可以在“界面”构建器中设置它。