【问题标题】:iOS - Reload UITableView to Fix Cell Label HeightiOS - 重新加载 UITableView 以修复单元格标签高度
【发布时间】:2013-09-09 19:20:21
【问题描述】:

嗯,这听起来很奇怪,过去 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 上!是因为beta版本吗?有没有人面临这样的情况?
  3. 我删除了 sizeToFit 并且存在同样的问题。事实上,sizeToFit 根本没有帮助,iOS 6 也不需要它。

【问题讨论】:

    标签: ios uitableview uilabel


    【解决方案1】:

    将所有 UITableviewcell 添加代码移至委托方法并尝试一下

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    

    【讨论】:

    • 好吧,这可能会减轻,但是在发现它在 iOS 6 上运行良好后,我怀疑 iOS 7 beta 6 中存在错误
    【解决方案2】:

    您是否使用自动布局?如果是这样,那么您可能不应该调用 sizeToFit。标签的大小可以从它的 intrinsicContentSize 推断出来,它会在文本设置后更新。

    请参阅我的回答 here 以获得更多见解。

    【讨论】:

      【解决方案3】:

      好吧,我终于知道为什么了。它实际上是一个错误(或者这就是它的外观)。方法 sizeWithFont... 与 iOS 7 新字体文本样式之一一起使用。似乎这种方法不能正确计算这种新字体。希望明天的 GM 能修复这个错误。如果没有,我必须使用解决方法,在高度上增加大约 10 个点。

      这与重新加载固定高度有什么关系(如果使用 sizeToFit),我真的不知道。全新的动态字体系统似乎很脆弱。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        相关资源
        最近更新 更多