如何让 UITableView 在动态高度单元格中滚动到底部?

Posted

技术标签:

【中文标题】如何让 UITableView 在动态高度单元格中滚动到底部?【英文标题】:How to let UITableView scroll to the bottom in dynamic height cells? 【发布时间】:2018-01-04 06:30:42 【问题描述】:

我有一个包含许多单元格的 UITableView。 其内容后面的每个单元格都有动态高度。 但是我注意到当我进入这个 viewController 时,UITableView 有时不会滚动最后一个 indexPath。 有任何想法来解决它。

tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension

let bottomOffSet = CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.bounds.size.height)
self.tableView.setContentOffset(bottomOffSet, animated: false)

PS:我不想使用“scrollToRow”,因为它会比“setContentOffset”多次触发 tableview 的函数“cellForRowAtIndexPath”。

tableView.scrollToRow(at: IndexPath(row: contents.count - 1, section: 0), at: .top, animated: animated)

【问题讨论】:

我不明白如何设置tableView's contentOffset 将滚动到最后一个索引路径?你到底想达到什么目的。 How to scroll to the bottom of a UITableView on the iPhone before the view appears的可能重复 ios TableView reload and scroll top的可能重复 @PGDev 就像一个聊天应用的聊天视图,我想滚动到最新消息。 你为什么不简单地使用scrollToRow(at indexPath: IndexPath, at scrollPosition: UITableViewScrollPosition, animated: Bool)?这是实现这一目标的直接方式。是的,cellForRowAtIndexPath 会因为tableViewCell's 的可重用性而被多次调用,如果单元格尚不可见。每当重用单元格时,都会在每种情况下调用它。 【参考方案1】:

尝试将tableView's contentOffset 设置为tableView's contentSize,即

override func viewDidAppear(_ animated: Bool)

    super.viewDidAppear(animated)
    let bottomOffSet = CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.bounds.size.height)
    self.tableView.setContentOffset(bottomOffSet, animated: false)

viewDidAppear 中设置contentOffset

同时实现以下UITableViewDelegate 方法:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

    return UITableViewAutomaticDimension


override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat

    return 126.0 //Maximum possible cell height

【讨论】:

以上是关于如何让 UITableView 在动态高度单元格中滚动到底部?的主要内容,如果未能解决你的问题,请参考以下文章

如何从动态 UITableView 单元格中获取 UILabel 的大小?

UITableView - 由单元格本身控制的动态单元格高度

嵌套 UITableView 动态高度

UITableView 自定义单元格高度未正确管理 swift 中的动态约束

动画在具有动态单元格高度的单元格中添加子视图

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview