Swift根据文本长度

时间:2018-01-24 13:23:32

标签: ios uitableview

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

如果您选择的主(上一个)UITableView单元格包含某个数据,则仅存在第1部分。

以上所有工作都符合预期,下面是父视图。项目列表来自数据库,有些项目有描述,有些则没有。例如,在此图片下方,您会看到该视图是' Classic Starters'被选中。然后在下面,如果' Stir Frys'被选中。 Stri Frys包含描述:

enter image description here

enter image description here

enter image description here

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

这是否必须以编程方式完成,或者它是否是XCode中的一项功能?

2 个答案:

答案 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

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