动态调整UITableViewCells大小的问题

时间:2015-12-12 22:13:56

标签: ios objective-c uitableview autolayout

我正在尝试动态调整自定义UITableViewCell的大小以适应属性字符串的内容。这是结果:

enter image description here

初始化tableView时,我会执行以下操作:

self.chatsTableView.estimatedRowHeight = 72.0;
self.chatsTableView.rowHeight = UITableViewAutomaticDimension;

我还实现了以下方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    return UITableViewAutomaticDimension;
}

正如你所看到的,它正在调整我的身高(允许的较小值为72)。然而,由于某种原因,它产生了一种奇怪的效果。我正在使用故事板和自动布局。

4 个答案:

答案 0 :(得分:1)

将其移至- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath方法。

答案 1 :(得分:0)

您还必须将estimatedRowHeight设置为UITableViewAutomaticDimension

答案 2 :(得分:0)

它应该只适用于您设置的两个属性,行高和估计的行高。 首先尝试删除委托方法。 如果在滚动时(因为一个错误)表格“跳转”一点,那么还要实现两个委托方法heightForRow和estimatedHeightForRow,并返回与您在属性中设置的相同的值,estimatedRowHeight = 72和rowHeight = UITableViewAutomaticDimension。 如果它仍然不起作用,那么我会仔细检查约束。

答案 3 :(得分:0)

适用于iOS 8 +

  1. 设置单元格约束。确保影响单元格高度的所有子视图是垂直连接的。在这种情况下:顶部标签的顶部边缘固定到superview的顶部和顶部标签底部边缘固定到底部的标签顶部边缘,底部标签底部边缘固定到superview的底部。必须关闭垂直约束链。在您的情况下,看起来底部标签的底边没有固定到contentView的底边。
  2. 将单元格出列以供重复使用时,请始终使用 dequeueReusableCellWithIdentifier:forIndexPath:不是未指定indexpath的较短版本。
  3. 设置self.tableView.rowHeight = UITableViewAutomaticDimension;
  4. 设置self.tableView.estimatedRowHeight = 50.0;。此步骤是可选的,但有助于表格查看正确管理滚动指示器等内容。
  5. 会工作:)