我有一个字幕样式 UITableViewCell,它的高度会根据每个字段的文本长度动态变化。问题是如果标签有多行,则 textLabel 的高度(CGSize 大小)不会增加。
奇怪的是,detailTextLabel 的高度正在增加(CGSize size2)。计算两个高度的代码是相同的。
这是我的功能:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
SETLISTFMNS0Song *song = [[[selectedSetlist.sets objectAtIndex:indexPath.section] songs]objectAtIndex:indexPath.row];
CGSize size = [song.name sizeWithFont:[UIFont fontWithName:setlistFont size:labelFontSize] constrainedToSize:CGSizeMake(self.setsTable.bounds.size.width, CGFLOAT_MAX)];
NSLog(@"Label: \"%@\" \tLabel Size: %f W %f H", song.name, size.width, size.height);
NSMutableString *detail;
if ([song cover]) {
detail = [[NSMutableString alloc] initWithFormat:@"(%@ cover)", [[song cover] name]];
}
if ([song with]) {
if (!detail) {
detail = [[NSMutableString alloc] initWithFormat:@"(with %@)", [[song with] name]];
}
else {
[detail appendFormat:@" (with %@)", [[song with] name]];
}
}
if ([song info]) {
if (!detail) {
detail = [[NSMutableString alloc] initWithFormat:@"(%@)", [song info]];
}
else {
[detail appendFormat:@" (%@)", [song info]];
}
}
if (detail.length != 0) {
CGSize size2 = [detail sizeWithFont:[UIFont fontWithName:setlistFont size:detailFontSize] constrainedToSize:CGSizeMake(self.setsTable.bounds.size.width, CGFLOAT_MAX)];
size.height += size2.height;
NSLog(@"Detail Label: \"%@\" \tDetail Label Size: %f W %f H", detail, size2.width, size2.height);
}
return size.height + 5;
}
我还在 cellForRowAtIndexPath 中将 textLabel 的 numberOfLines 属性设置为 0 以支持多行:
cell.textLabel.numberOfLines = 0;
cell.detailTextLabel.numberOfLines = 0;
更新:感谢@josh,我现在明白为什么会这样了。我将宽度约束设置为 UITableView 的宽度,它太宽了。任何人都知道如何在创建 UILabel 之前找到它的宽度?哈!
谢谢!