嗯,这听起来很奇怪,我花了最后3个小时试图解决它。我有一个包含两个标签的自定义单元格的表格视图。标签高度是变量,使用方法sizeWithFont:constrainedToSize:lineBreakMode
计算。
cell = [tableView dequeueReusableCellWithIdentifier:sCellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.tariffPlanCellContentView.cellPrefixLabel.text = [NSString stringWithFormat:sPrefixStringWithColon, [self getPrefixStringAtIndexPath:indexPath]];
cell.tariffPlanCellContentView.cellPrefixLabel.textAlignment = UITextAlignmentLeft;
cell.tariffPlanCellContentView.cellPrefixLabel.frame = CGRectMake(cell.tariffPlanCellContentView.cellPrefixLabel.frame.origin.x,
cell.tariffPlanCellContentView.cellPrefixLabel.frame.origin.y,
kTableViewCellLabelWidth,
[self getSizeForPrefixStringAtIndexPath:indexPath].height);
cell.tariffPlanCellContentView.cellDetailsLabel.text = [self getDetailStringAtIndexPath:indexPath];
cell.tariffPlanCellContentView.cellDetailsLabel.frame = CGRectMake(cell.tariffPlanCellContentView.cellDetailsLabel.frame.origin.x,
cell.tariffPlanCellContentView.cellPrefixLabel.frame.origin.y + cell.tariffPlanCellContentView.cellPrefixLabel.frame.size.height + 3,
kTableViewCellLabelWidth,
[self getSizeForDetailsStringAtIndexPath:indexPath].height);
[cell.tariffPlanCellContentView.cellPrefixLabel sizeToFit];
[cell.tariffPlanCellContentView.cellDetailsLabel sizeToFit];
在表格视图的第一次加载时,所有单元格仅显示一行。只有当我滚动表格视图(或以编程方式“再次”重新加载表格视图)时,标签才会被修复!我不知道为什么这样做? cellPrefixLabel
和cellDetailsLabel
位于从nib加载的自定义单元格内。两者都有numberOfLines = 0
更新
答案 0 :(得分:1)
将所有UITableviewcell添加代码移动到委托方法并尝试
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
答案 1 :(得分:0)
您使用的是自动布局吗?如果是这样,那么你可能不应该调用sizeToFit。标签的大小将从其intrinsicContentSize推断出来,该内容在设置文本后更新。
有关其他见解,请参阅我的回答here。
答案 2 :(得分:0)
好的,我终于知道了原因。它实际上是一个错误(或者这就是它的外观)。方法sizeWithFont ...与iOS 7新的字体文本样式之一一起使用。看来这个方法不能正确计算这个新字体。希望明天的GM能解决这个问题。如果没有,我必须通过在高度上添加大约10个点来使用解决方法。
这与修复高度的重装有什么关系(如果使用sizeToFit),我真的不知道。整个新的动态字体系统似乎很脆弱。