添加文本后自动高度单元格

时间:2015-08-28 13:08:55

标签: swift uitableview swift2

我有tableView,当我输入我想要自动高度单元格。但我不知道如何解决它。我的第一个想法是:

self.chatTableView.cellForRowAtIndexPath(indexPath)?.textLabel?.text = new_char
self.chatTableView.cellForRowAtIndexPath(indexPath)?.sizeToFit()
self.chatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)

当我有.sizeToFit()这一行时,我的结果如下所示: first result 但是当我评论这一行时:

self.chatTableView.cellForRowAtIndexPath(indexPath)?.textLabel?.text = new_char
self.chatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)

我的结果看起来像这样: econd result

有办法解决吗?

1 个答案:

答案 0 :(得分:1)

您已直接更改UITableViewCell的高度。但是单元格的高度是在UITableView中处理的。要完成这项工作,你必须做两件事:

<强> 1。使用自我调整大小的单元格

只需将这两行代码添加到viewDidLoad方法中:

override func viewDidLoad() {
        super.viewDidLoad()
        ...
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 40
    }

estimatedRowHeight仅用于计算滚动条的大小和位置,因此您只需将单元格的正常预期高度放在此处。

<强> 2。更改文本后重新加载单元格

更改了单元格标签的文本后,您必须告诉UITableView重新加载此单元格,以便调整其高度。您可以通过调用此方法来执行此操作:

func addSomeText() {
    // add the text to your data source

    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}

显然indexPath是你单元的indexPath。

重要的一件事:您无法将新文本直接添加到单元格中。相反,您必须将其添加到dataSource。否则,文本将在重新加载后消失,因为单元格在出列时从dataSource获取其文本。