我有一个包含2个部分的TableViewController: 第1节 - 是从xib文件加载的单元格。这个单元格只包含一个TextView。 第2节 - 包含从数组填充的多个单元格。
如果您选择的主(上一个)UITableView单元格包含某个数据,则仅存在第1部分。
以上所有工作都符合预期,下面是父视图。项目列表来自数据库,有些项目有描述,有些则没有。例如,在此图片下方,您会看到该视图是' Classic Starters'被选中。然后在下面,如果' Stir Frys'被选中。 Stri Frys包含描述:
现在,我想要的是,在Stir Frys页面上显示的描述单元格,根据其中文本的长度自动增长。因此,如果描述为10行,则它将增长以显示所有10行。
这是否必须以编程方式完成,或者它是否是XCode中的一项功能?
答案 0 :(得分:3)
您可以使用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
}
答案 1 :(得分:1)
首先您需要将estimatedRowSize
设置为最能估算最常见尺寸的值,并将rowSize
设置为UITableViewAutomaticDimension
:
self.tableView.estimatedRowHeight = 44
self.tableView.rowHeight = UITableViewAutomaticDimension
在您的情况下,由于除了第一个以外的所有其他单元格都应该相同,您可以将其余单元格的高度用作estimatedRowHeight
。
您根本不必实施heightForRowAt
。
您需要做的第二次步骤是在单元格上设置适当的约束。这意味着您必须将单元格的内容约束到单元格的左侧,右侧,顶部和底部,这样当内容增长时,单元格也需要增长。常见的错误是忘记限制底部,因此细胞不会生长,内容物会从细胞底部渗漏。
第三次,因为您的动态单元格包含UITextView
,所以您需要确保它会随着文本的增长而增长。那不是自动的。为实现这一点,基于this answer,这应该足够(在单元格中):
textView.isScrollEnabled = false
如果您使用的是故事板,只需取消选中“已启用滚动”。