我有tableView,当我输入我想要自动高度单元格。但我不知道如何解决它。我的第一个想法是:
self.chatTableView.cellForRowAtIndexPath(indexPath)?.textLabel?.text = new_char
self.chatTableView.cellForRowAtIndexPath(indexPath)?.sizeToFit()
self.chatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
当我有.sizeToFit()
这一行时,我的结果如下所示:
但是当我评论这一行时:
self.chatTableView.cellForRowAtIndexPath(indexPath)?.textLabel?.text = new_char
self.chatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
有办法解决吗?
答案 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
获取其文本。