iOS - 重新加载UITableView以修复单元格标签高度

时间:2013-09-09 19:20:21

标签: ios uitableview uilabel

嗯,这听起来很奇怪,我花了最后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];

在表格视图的第一次加载时,所有单元格仅显示一行。只有当我滚动表格视图(或以编程方式“再次”重新加载表格视图)时,标签才会被修复!我不知道为什么这样做? cellPrefixLabelcellDetailsLabel位于从nib加载的自定义单元格内。两者都有numberOfLines = 0

更新

  1. 我没有使用自动布局,我仍然支持iOS 5.
  2. 该应用程序在iOS 6上正常运行,该错误仅适用于iOS 7 beta 6!它是由于测试版吗?有没有人面对这样的事情?
  3. 我删除了sizeToFit并且存在同样的问题。事实上,sizeToFit根本没有帮助,iOS 6不需要它。

3 个答案:

答案 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),我真的不知道。整个新的动态字体系统似乎很脆弱。