代码之家  ›  专栏  ›  技术社区  ›  Rob Lourens

uitableview包含多行uilabel。标签上的sizetofit第一次起作用,但是单元格重新绘制后标签的大小不正确

  •  1
  • Rob Lourens  · 技术社区  · 16 年前

    我记录信息并按如下方式调整标签大小:

    NSLog([NSString stringWithFormat:@"before: %@, %f", [item valueForKey:@"item"], itemDescLabel.frame.size.width]);
    [itemDescLabel sizeToFit];
    NSLog([NSString stringWithFormat:@"after: %@, %f", [item valueForKey:@"item"], itemDescLabel.frame.size.width]);
    

    一开始是正确的,记录数据如下

    before: Nachos, 280.000000
    after: Nachos, 265.000000
    before: Quesadilla, 232.000000
    after: Quesadilla, 229.000000
    

    但在上下滚动之后,标签显然会太宽或太窄,它会记录如下数据

    before: Nachos, 0.000000
    after: Nachos, 967.000000
    before: Quesadilla, 171.000000
    after: Quesadilla, 167.000000
    

    我使用apple建议的方法从nib加载自定义uitableviewcell,比如

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"ItemCell" owner:self options:nil];
        cell = itemCell;
        itemCell = nil;
    }
    UILabel *itemDescLabel = (UILabel *)[cell.contentView viewWithTag:1];
    
    1 回复  |  直到 16 年前
        1
  •  4
  •   Rob Lourens    16 年前

    在调用sizetofit之前,我需要重置uilabel的帧大小。单元格被重复使用以节省内存,而且当frame.size不是标签的原始尺寸时,显然size-tofit有时会出错。我不知道这是为什么,但它的工作。