【问题标题】:Auto height cell after add text添加文本后自动高度单元格
【发布时间】:2015-08-28 13:08:55
【问题描述】:

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

我的结果如下所示:

有什么办法可以解决吗?

【问题讨论】:

    标签: swift uitableview swift2


    【解决方案1】:

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

    1.使用自定大小的单元格:

    只需将这两行代码添加到您的viewDidLoadmethod:

    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 获取其文本。

    【讨论】:

    • 我可以直接向单元格添加文本:)
    • 好的,那么您添加文本的方式与我不同。更好;-)
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多