//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)
以上解决方案对我不起作用
答案 0 :(得分:0)
虽然UITableView
是UIScrollView
的子视图,但是在表格视图中以编程方式滚动的更好方法。您可以使用scrollToRow
功能;最后的'可以使用numberOfSections
和numberOfRows
找到索引路径。
答案 1 :(得分:0)
您在计算中缺少一个重要的值 - 当前" y"重新加载后的偏移量。您将偏移设置为新高度和旧高度之间的差异 - 这可能会在某处滚动到顶部。
解决方案是替换它:
let adjustablePoint: CGPoint = CGPoint(x: 0, y: newHeight - oldHeight
)
用这个:
let adjustablePoint: CGPoint = CGPoint(x: 0, y: self.tableView.contentOffset.y + newHeight - oldHeight)
这个想法是通过相对于新位置的高度差来移动表格 - 所以它应该在重新加载表格视图之后发生,并且它被重新定位到由UIKit计算的自动内容偏移量。
我认为你不需要这些线来达到你想要的效果:
UIView.setAnimationsEnabled(false)
...
UIView.setAnimationsEnabled(true)
...
self.chatTableView.layoutIfNeeded()
确认我的计算修正工作正常后,请尝试删除它们