如何将UITableViewCell高度调整为内部的UITextView内容?

时间:2016-09-24 00:53:35

标签: ios swift uitableview uitextview

在我的故事板中,我有UITableView动态生成的UITableViewCell。每个单元格包含2个标签和1个文本视图:

enter image description here

我有一个代码可以将文本字段的大小调整为文本量:

let fixedWidth = cell.myComment.frame.size.width
cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
let newSize = cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
var newFrame = cell.myComment.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
cell.myComment.frame = newFrame;

它工作正常,当我将textView的背景颜色设置为红色时,我看到:

enter image description here

和单元格本身 - 我在这里设置大小:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
     if indexPath.row == 0 {
         return 100//this is my static cell
     }
     else {
         return 117; //for now it's hardcoded - how can I set this value dynamically based on content?
     }
}

正如我在上面的评论中写的那样 - 如何根据文本视图中的文本量动态设置单元格的高度?

1 个答案:

答案 0 :(得分:3)

获取自行调整表格单元格的关键(基于自动布局,我建议)如下:

  • 将您的子视图添加到contentView
  • UITableViewCell
  • 在子视图和contentView之间提供约束,以便您的子视图到达表格单元格的所有边缘。在您的情况下,这可能意味着将leading的{​​{1}},trailingtopbottom边缘与{{1}的相应边缘对齐}}。
  • 将行高设置为UITextView,而不是硬编码contentView
  • 在控制器的某个位置,使用UITableViewAutomaticDimension提供高度估计(硬编码常量很好,这是为了提高性能)。