Swift根据文本长度动态生长单元格

我有一个TableViewController,它包含2个部分:第1部分 – 是从xib文件加载的单元格。 这个单元格只包含一个TextView。 第2节 – 包含从Array填充的多个单元格。

仅当您选择的主(上一个)UITableView单元格包含某个数据时,才存在第1节。

所有上述工作都符合预期,下面是父视图。 项目列表来自数据库,一些项目有描述,有些项目没有。 例如,在此图像下方,您将看到视图是“经典入门者”被选中。 然后在下面,如果选择“Stir Frys”,您将看到视图。 Stri Frys包含一个描述:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

现在,我想要的是,在Stir Frys页面上显示的描述单元格,根据其中文本的长度自动增长。 因此,如果描述是10行长,它将增长以显示所有10行。

这是否必须以编程方式完成,或者它是XCode中的一个我缺少的function?

首先,您需要将estimatedRowSize设置为最佳估计最常见大小的值,并将rowSizeUITableViewAutomaticDimension

 self.tableView.estimatedRowHeight = 44 self.tableView.rowHeight = UITableViewAutomaticDimension 

在您的情况下,由于除了第一个以外的所有其他单元格应该是相同的,您可以使用其余单元格的高度作为estimatedRowHeight

您根本不必实现heightForRowAt

您需要做的第二步是在单元格上设置适当的约束。 这意味着您必须将单元格的内容约束到单元格的左侧,右侧,顶部和底部,这样当内容增长时,单元格也需要增长。 常见的错误是忘记限制底部,因此细胞不会生长,内容物会通过细胞底部渗漏。

第三 ,由于您的动态单元格包含UITextView ,因此您需要确保它将随文本一起增长。 那不是自动的。 为了达到这个目的,基于这个答案 ,这应该足够了(在单元格中):

 textView.isScrollEnabled = false 

如果您使用的是故事板,则只需取消选中启用滚动条。

您可以使用UITableViewAutomaticDimension。

1)例如,在viewDidLoad中设置tableview的属性estimatedRowHeight和rowHeight。 喜欢这个 :

  self.tableView.estimatedRowHeight = 50 self.tableView.rowHeight = UITableViewAutomaticDimension 

2)在heightForRowAt委托方法中返回UITableViewAutomaticDimension:

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension }