我正在尝试在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];
上面这段代码的错误?
答案 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;
您也可以在“界面”构建器中设置它。