我正在使用以下方法实现来计算包含多行文字的UITableViewCell
的高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1 && indexPath.row == 1) {
NSDictionary *fields = self.messageDetailsDictionary[@"fields"];
NSString *cellText = fields[@"message_detail"];
UIFont *cellFont = [UIFont systemFontOfSize:14.0];
CGSize constraintSize = CGSizeMake(250.0f, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
return labelSize.height + 20;
} else {
return tableView.rowHeight;
}
}
为了完整性,这是此单元格的cellForRowAtIndexPath
条目:
UITableViewCell *cell = [[UITableViewCell new] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DetailCell"];
if (cell == nil) {
cell = [[UITableViewCell new] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DetailCell"];
}
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.font = [UIFont systemFontOfSize:14.0];
NSDictionary *fields = self.messageDetailsDictionary[@"fields"];
cell.textLabel.numberOfLines = 0; // This means multiline
cell.textLabel.text = fields[@"message_detail"];
return cell;
UITableViewCell
位于分组UITableView
中,这很重要,因为它会影响单元格的宽度。
这是有效的,它确实计算了一个足够大的单元格高度来容纳输入的文本,但它似乎有点太大,因为在顶部和底部有太多的空间细胞。这取决于文本的数量,因此我认为它与return labelSize.height + 20;
语句无关。我怀疑这是我在CGSizeMake
中使用的'250.0f'值,但我不知道这里应该是什么值。
最终我想要的是让一个单元格在文本的上方和下方具有一致的填充,以用于任何内容大小。
有人可以帮忙吗?
答案 0 :(得分:0)
通过消除过程,结果是幻数为270.0f。 tableView框架的宽度可以从self.tableView.frame.size.width获得。这是320.0f,从中获得50.0f(相当于270.0f)似乎产生了一致的结果。
所以方法应该如下:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1 && indexPath.row == 1) {
NSDictionary *fields = self.messageDetailsDictionary[@"fields"];
NSString *cellText = fields[@"message_detail"];
UIFont *cellFont = [UIFont systemFontOfSize:14.0];
CGSize constraintSize = CGSizeMake(self.tableView.frame.size.width - 50.0f, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
return labelSize.height + 20.0f;
} else {
return tableView.rowHeight;
}
}
我不确定为什么50.0f是正确的值,因为我不确定50.0f中有多少是从单元格边框到tableView边缘的距离,以及有多少内部填充是单元格本身,但它可以工作,除非你修改了这两个值中的任何一个。