gpt4 book ai didi

iOS UITableViewController - 插入并滚动到底部 - 有时会跳转

转载 作者:可可西里 更新时间:2023-11-01 00:57:09 24 4
gpt4 key购买 nike

我正在开发一个 iOS 聊天应用程序,但我在聊天 View 上遇到了问题。我正在使用 UITableViewController 作为聊天 View 。正如您在视频中看到的那样,有时插入新行时我的表格会跳转: https://youtu.be/8IgEUJ5uYAc .

这就是我插入并滚动到表格底部的方式:

        self.conversation.append(message)

self.tableView.beginUpdates()
self.tableView.insertRows(at: [IndexPath(row: self.conversation.count - 1, section: 0)], with: UITableViewRowAnimation.none)
self.tableView.endUpdates()


DispatchQueue.main.async {
self.tableView.scrollToRow(at: IndexPath(row: self.conversation.count - 1, section: 0), at: UITableViewScrollPosition.bottom, animated: false)
self.footerView?.isHidden = true
self.theMessage.text = nil
self.switchBottomActions(showSend: false)
}

每个消息对象都有一个名为 estimatedMessageHeight 的属性。我在那里保存消息单元格大小,所以 tableView 的 heightForRowAt 代码是:

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

guard let cellHeight = self.conversation[indexPath.row].estimatedHeight else {

return 0

}

return cellHeight

}

有什么解决办法吗?

最佳答案

我也遇到了同样的问题,最后我得到了以下解决方案。它给我的动画感觉就像我们在 WhatsApp 应用程序中一样。

UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {

let reloadIndexPath = IndexPath(item: self.arrTableVwData.count - 1, section: 0)

self.tableVw.beginUpdates()
self.tableVw.insertRows(at:[reloadIndexPath], with: UITableViewRowAnimation.fade)
self.tableVw.endUpdates()
self.tableVw.scrollToRow(at: reloadIndexPath, at: .bottom, animated: false)

}, completion: nil)

注意:请不要在 options:[] 中传递任何动画类型,因为我们已经在 insertRowsscrollToRow 方法中传递了它们。

关于iOS UITableViewController - 插入并滚动到底部 - 有时会跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com