带有insertRowAtIndexPath的动态UITableViewCell

时间:2014-11-16 18:05:41

标签: ios objective-c uitableview

我正在尝试设计一个UITableView,我需要插入一个行,其高度(自定义UITableViewCell高度)将根据其UILabel字符串的长度来决定。

我跟随Ray Wenderlich的this tutorial来调整uitableview单元格高度相对于其UILabel高度。但是当我使用insertRowAtIndexPath使用自定义UITableViewCell插入行时,

dispatch_once(&onceToken, ^{
    sizingCell = [self.tableView dequeueReusableCellWithIdentifier:RWBasicCellIdentifier];
  });

将确保只插入一行而不是多次。

如何插入变量高度的RowAtIndexPath?

这是我的heightForRowAtIndexPath

ChattingCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ChattingCellId2"];
        CGRect messageLabelRect = [cell.labelMessage.attributedText boundingRectWithSize:(CGSize){cell.labelMessage.frame.size.width, CGFLOAT_MAX} options:NSStringDrawingUsesLineFragmentOrigin context:nil];
        cell.labelMessage.frame = CGRectMake(cell.labelMessage.frame.origin.x, cell.labelMessage.frame.origin.y, cell.labelMessage.frame.size.width, messageLabelRect.size.height);
        [cell.labelMessage sizeThatFits:CGSizeMake(cell.labelMessage.frame.size.width, messageLabelRect.size.height)];
        float height = cell.labelMessage.frame.origin.y + cell.labelMessage.frame.size.height + cell.labelSent.frame.size.height + 10;
        [cell prepareForReuse]; //here your cell would normally be returned for cellForRowAtIndexPath, except we just mark it for reuse, we have the height we need
        return height;

1 个答案:

答案 0 :(得分:1)

您还应该在表视图控制器中实现heightForRowAtIndexPath。 当您致电insertRowAtIndexPath时,首先调用heightForRowAtIndexPath,然后调用cellForRowAtIndexPath。 在heightForRowAtIndexPath中,您必须确定新单元格的高度,假设您使用的是自动布局,因此您可以设置 frame.size.width的单元格和强制通过调用setNeedsLayoutlayoutIfNeeded来布局单元格,然后通过自动布局计算高度。