UITableViewCell不中继/重新绘制

时间:2014-03-03 22:34:50

标签: ios uitableview

我正在尝试在UITableViewCell中添加一个可以跨越两行的标签,但如果只有一行将其垂直对齐到第一行。

计算标签高度(下面)的代码似乎有效,但标签没有重新加入/重新绘制。如果我将单元格从视图中滚动并再次返回,则标签的高度正确。

我已尝试[cell setNeedsLayout][cell setNeedsDisplay],[titleLabel setNeedsLayout][titleLabel setNeedsLayout,但没有任何组合有效。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell" forIndexPath:indexPath];

    Item *item = (self.items)[indexPath.section][indexPath.row];

    UILabel *titleLabel = (UILabel *)[cell viewWithTag:100];
    titleLabel.text = item.title;
    titleLabel.backgroundColor = [UIColor redColor];

    // Some titles span two lines, so resize to fit the new content.

    CGRect textRect = [titleLabel.attributedText boundingRectWithSize:CGSizeMake(titleLabel.frame.size.width, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];
    CGRect labelRect = CGRectIntegral(CGRectMake(titleLabel.frame.origin.x,
                                             titleLabel.frame.origin.y,
                                             titleLabel.frame.size.width,
                                             textRect.size.height));
    NSLog(@"%@, %f", titleLabel.text, labelRect.size.height); // This logs out the correct height

    titleLabel.frame = labelRect;

    return cell;
}

2 个答案:

答案 0 :(得分:0)

请试试我的建议。也许它可以帮助你在UITableview中重复使用单元格。请检查您的代码中的以下几点:

  1. 在iPhone中重绘UITableView时,如果你单元格== nil怎么办。这就是为什么你必须为UITableViewCell的可重用性做出类似下面的条件。

    // Get table View Cell
    static NSString *CellIdentifier = @"ItemCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    
    if (cell == nil) {
    
        NSArray *nib;
        nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
        cell = (UITableViewCell *) [nib objectAtIndex:0];
    }
    
  2. 请测试并告诉我。

答案 1 :(得分:0)

原来我正在使用自动布局,这意味着我无法直接设置框架。相反,我需要添加一个高度约束并将其连接到IBOutlet子类上的UITableViewCell