UITableView中的单元格加载缓慢

时间:2014-07-10 12:20:03

标签: ios uitableview

我正在尝试使用看起来像消息的单元格的视图控制器。 在cellForRowAtIndexPath方法中,我获取文本并使用以下代码进行测量:

NSStringDrawingContext *ctx = [NSStringDrawingContext new];
    NSAttributedString *aString = [[NSAttributedString alloc] initWithString:message.text];
    UITextView *calculationView = [[UITextView alloc] init];
    [calculationView setAttributedText:aString];
    CGRect textRect = [calculationView.text boundingRectWithSize:self.view.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:calculationView.font} context:ctx];
    cell.messageLabel.frame = CGRectMake(20, 20, MIN(textRect.size.width + 20, 240), textRect.size.height + 10);

此代码还会更改标签的大小和位置。 但问题是标签的大小在视图加载后仅变化一秒,而在视图加载时不会立即变化。 有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

实施tableView:heightForRowAtIndexPath:方法。 cellForRowAtIndexPath方法不是您应该进行高度计算的地方。

实施例

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    NSString *text = [DescArr objectAtIndex:[indexPath row]];
    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
    CGFloat height = MAX(size.height, 100.0);
    return height; 
}