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

Ios 如何在顶部插入项目后将UITableView滚动到上一个contentOffset,ios,iphone,swift,uitableview,Ios,Iphone,Swift,Uitableview,上述解决方案对我不起作用虽然UITableView是UIScrollView的子视图,但有一种更好的方法可以在表视图中以编程方式滚动。您可以使用该功能;“最后一个”索引路径可以通过和找到。您在计算中缺少一个重要值-重新加载后的当前“y”偏移量。您将偏移设置为新高度和旧高度之间的差值-这可能会滚动到顶部的某个位置 解决方案将是替换此: 让可调整点:CGPoint=CGPoint(x:0,y:newHeight-oldHeight) 为此: //Old table view height

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

虽然
UITableView
UIScrollView
的子视图,但有一种更好的方法可以在表视图中以编程方式滚动。您可以使用该功能;“最后一个”索引路径可以通过和找到。

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

解决方案将是替换此:

让可调整点:CGPoint=CGPoint(x:0,y:newHeight-oldHeight

为此:

//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)
其思想是通过相对于新位置的高度差移动表格-因此,在重新加载表格视图并将其重新定位到UIKit计算的自动contentOffset后,应该会发生这种情况

我认为,要实现您的目标,您不需要这些路线:

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

在确认我的计算修复程序正常工作后,尝试删除它们

您在代码中同时使用了
self.tableView
self.chatTableView
。这是故意的,还是你的问题的根源?@Glorfindel我在发布问题时更改命名约定时错过了它,谢谢通知,问题现在已经编辑好了。我不太明白你想要实现什么<默认情况下,代码>UITableView在插入新行时应保持原始内容偏移量。另外,为什么您需要全局禁用动画,并指示
insertRows
不要同时设置动画?您是否检查了身高“新”和“旧”的大小是否不同?还有什么在您的解决方案中不起作用?它会滚动到任何地方吗?我想他并没有真正要求最后一个索引路径——更像是以前的内容偏移量
UIView.setAnimationsEnabled(false)
...
UIView.setAnimationsEnabled(true)
...
self.chatTableView.layoutIfNeeded()