我正在尝试设计一个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;
答案 0 :(得分:1)
您还应该在表视图控制器中实现heightForRowAtIndexPath
。
当您致电insertRowAtIndexPath
时,首先调用heightForRowAtIndexPath
,然后调用cellForRowAtIndexPath
。
在heightForRowAtIndexPath
中,您必须确定新单元格的高度,假设您使用的是自动布局,因此您可以设置
frame.size.width
的单元格和强制通过调用setNeedsLayout
和layoutIfNeeded
来布局单元格,然后通过自动布局计算高度。