2015-08-28 71 views
2

我有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

您已直接更改了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获取文本。

+0

我可以直接添加文本到单元格:) – Wraith

+0

好的,那么你添加的文本不同于我做的。甚至更好;-) – joern

相关问题