所以这里是怎么回事:我正在实现一个 UITableView (分组样式,有 1 个部分),以标准 UITableViewCells (样式 - UITableViewCellStyleSubtitle)作为内容。我的 textLabel.text 可能很长,这就是我在 TableView:cellForRowAtIndexPath 中设置一些参数的原因:
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont boldSystemFontOfSize:CELL_FONT_SIZE];
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.detailTextLabel.numberOfLines = 0;
[self configureCell:cell atIndexPath:indexPath];
为了调整单元格高度,我实现了 tableView:heightForRowAtIndexPath: 如下:
Test *test = (Test *)[self.frc objectAtIndexPath:indexPath];
NSString *cellText = test.test_name;
UIFont *cellFont = [UIFont boldSystemFontOfSize:CELL_FONT_SIZE];
CGFloat horizontalConstraint;
if (self.bagdePresent)
{
// there will be big badge!
horizontalConstraint = 250.0f;
} else
{
// there will NO badge
horizontalConstraint = 280.0f;
}
CGSize constraintSize = CGSizeMake(horizontalConstraint, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
// return label height, 20 as gap, 30 for rating image,
return labelSize.height + 20 + 30;
首先我检查单元格中是否会有徽章图像,如果有,我会减少可用的水平空间。
这就是问题(最后):对于某些字符串(某些字符串长度) sizeWithFont:constrainedToSize:lineBreakMode: 当我将其文本属性设置为相同的字符串时,返回的值小于实际单元格的 textLabel 高度。结果,如果单元格的 textLabels 大于单元格的边界。当我从显示错误的字符串中添加\删除一些单词时, sizeWithFont:constrainedToSize:lineBreakMode: 会给出精确的高度,稍后用 textLabel 实际高度确认。
我认为这可能是字体的问题,但正如您所看到的字体是相同的。从这里挖到哪里?;)
UPD1: 这是一个 textLabel 比在 heightForRowAtIndexPath 中计算的高的示例: