This question already has answers here:
reloadData() of UITableView with Dynamic cell heights causes jumpy scrolling

(21个回答)


2年前关闭。




我需要扩展/折叠UITableView的一部分。我可以通过调用reloadSections:withRowAnimation:并从0返回tableView:numberOfRowsInSection:来实现(如果该节应该折叠的话)。

除了一种情况,它工作正常。如果表格 View 一直向下滚动并且折叠后内容大小减小,则最终滚动超过最大偏移量。
现在,它并没有在动画中滚动,而是在那儿捕捉,这看起来很丑陋:

ios - UITableView在调用reloadSections :withRowAnimation:之后跳转-LMLPHP

这是我尝试过的:
  • reloadSections:withRowAnimation:包装在beginUpdates/endUpdates中:
    tableView.beginUpdates()
    tableView.reloadSections(indexSet, withRowAnimation: .Automatic)
    tableView.endUpdates()
    

    那没有帮助。
  • 用完成块将reloadSections:withRowAnimation:包装在CATransaction中,计算其中的滚动距离并使用动画滚动表格 View :
    CATransaction.begin()
    CATransaction.setCompletionBlock {
        // tableView.contentSize is incorrect at this point
        let newContentOffset = ... // calculated value is not correct
        tableView.setContentOffset(newContentOffset, animated: true)
    }
    
    tableView.beginUpdates()
    tableView.reloadSections(indexSet, withRowAnimation: .Automatic)
    tableView.endUpdates()
    CATransaction.commit()
    

  • 如何确保表格 View 不会跳转?

    最佳答案

    在可折叠部分中使用自定义 header 时,我遇到了这个问题。我确实通过实现解决了这个问题。

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

    关于ios - UITableView在调用reloadSections :withRowAnimation:之后跳转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34925518/

    10-13 09:25