我正在使用以下方法实现来计算UITableViewCell
包含多行文本的 a 的高度:
- (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
GroupedUITableView
中,这很重要,因为它会影响单元格的宽度。
这在某种程度上是有效的,它确实计算了一个足够大的单元格高度以容纳正在输入的文本,但它似乎有点太大了,因为单元格的顶部和底部有太多的空间。这取决于文本的数量,所以我认为它与return labelSize.height + 20;
语句无关。我怀疑这取决于我使用的“250.0f”值,CGSizeMake
但我不知道正确的值应该是什么。
最终我想要的是有一个单元格,在任何内容大小的文本上方和下方都有一致的填充。
任何人都可以帮忙吗?