gpt4 book ai didi

ios - 在顶部插入项目后如何将 UITableView 滚动到上一个 contentOffset

转载 作者:行者123 更新时间:2023-11-30 12:47:55 26 4
gpt4 key购买 nike

//Old table view height                
let oldHeight: CGFloat = self.tableView.contentSize.height

// Update table with indexpath array
UIView.setAnimationsEnabled(false)
self.tableView.insertRows(at: (indexPath as NSArray) as! [IndexPath], with: UITableViewRowAnimation.none)
UIView.setAnimationsEnabled(true)

//Layout table view if needed
self.tableView.layoutIfNeeded()

//New content offset
let newHeight: CGFloat = self.tableView.contentSize.height

//Set content offset
let adjustablePoint: CGPoint = CGPoint(x: 0, y: newHeight - oldHeight)

//Set
self.tableView.setContentOffset(adjustablePoint, animated: false)

上述解决方案对我不起作用

最佳答案

您在计算中遗漏了一个重要值 - 重新加载后的当前“y”偏移量。您将偏移量设置为新高度和旧高度之间的差异 - 这可能会滚动到顶部的某个位置。

解决方案是替换它:

让 adjustmentPoint: CGPoint = CGPoint(x: 0, y: newHeight - oldHeight)

这样:

let adjustablePoint: CGPoint = CGPoint(x: 0, y: self.tableView.contentOffset.y + newHeight - oldHeight)

这个想法是通过相对于新位置的高度差移动表格 - 因此这一切都应该在重新加载表格 View 并将其重新定位到由 UIKit 计算的自动 contentOffset 后发生。

我认为您不需要这些行来实现您想要的:

UIView.setAnimationsEnabled(false)
...
UIView.setAnimationsEnabled(true)
...
self.chatTableView.layoutIfNeeded()

在确认我的计算修复有效后尝试删除它们

关于ios - 在顶部插入项目后如何将 UITableView 滚动到上一个 contentOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384899/

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