UITableViewCell中的UILabel高度变化仅发生在第二次滚动中

时间:2014-06-30 13:30:32

标签: ios uitableview uilabel

最奇怪的事情......

我在UITableViewCell中有UILabel,它会根据文本内容自动更改高度。 我设法让它工作 - 但只是在我第二次滚动。当我向下滚动时,文本被截断为1行。当我向上滚动而不是向下滚动时,单元格是完美的。

怎么回事?

代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CommentCell *cell = (CommentCell *)[tableView dequeueReusableCellWithIdentifier:@"CommentCell"];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CommentCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    if ([commentsArray count] == 0)
    {
        return nil;
    }

    CommentDataItem *commentItem = [commentsArray objectAtIndex:indexPath.row];

    [cell.commentText setNumberOfLines:0];
    [cell.commentText setText:commentItem.text];
    NSDictionary *attributes = @{NSFontAttributeName: cell.commentText.font};
    CGRect rect = [cell.commentText.text boundingRectWithSize:CGSizeMake(cell.commentText.frame.size.width, MAXFLOAT)
                                            options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:attributes
                                            context:nil];
    CGRect labelFrame = cell.commentText.frame;
    labelFrame.size.height = rect.size.height;
    cell.commentText.frame = labelFrame;
    [cell.commentText sizeToFit];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CommentDataItem *commentItem = [commentsArray objectAtIndex:indexPath.row];
    NSString *commentText = commentItem.text;

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:17]};
    CGRect rect = [commentText boundingRectWithSize:CGSizeMake(267, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:attributes
                                              context:nil];
    return rect.size.height + 50;
}

截图解释情况:
在第一次向下滚动时,这就是我所看到的:
http://imgur.com/IFufIjR,utPdU0d

当我向上滚动而不是向下滚动时,这就是我得到的(请注意,现在有些注释应该有多条线路)
http://imgur.com/IFufIjR,utPdU0d#1

2 个答案:

答案 0 :(得分:1)

显然,虽然我以为我检查了它 - 但是在删除之后,单元格确实有自动布局(在xib文件中)。一切都很棒!

如果有人遇到同样的问题,请留下这个问题

答案 1 :(得分:0)

我遇到了同样的问题。原因是uiviewcontroller的xib中uitableview的宽度和uitableviewcell的xib中contentview的宽度不相同。