UITableView 在调用 reloadSections:withRowAnimation: [重复] 后跳转

Posted

技术标签:

【中文标题】UITableView 在调用 reloadSections:withRowAnimation: [重复] 后跳转【英文标题】:UITableView jumps after calling reloadSections:withRowAnimation: [duplicate] 【发布时间】:2016-01-21 13:45:38 【问题描述】:

我需要展开/折叠UITableView 的一部分。我通过调用reloadSections:withRowAnimation: 并从tableView:numberOfRowsInSection: 返回0 来执行此操作,如果该部分应该被折叠。

除了一种情况外,它工作正常。如果表格视图一直向下滚动并且折叠后内容大小减小,则最终滚动超出最大偏移量。 现在不是用动画滚动到位,它只是卡在那里,看起来很难看:

这是我尝试过的:

    reloadSections:withRowAnimation: 包装在beginUpdates/endUpdates 中:

    tableView.beginUpdates()
    tableView.reloadSections(indexSet, withRowAnimation: .Automatic)
    tableView.endUpdates()
    

    这没有帮助。

    使用完成块将reloadSections:withRowAnimation: 包装在CATransaction 中,计算其中的滚动距离并使用动画滚动表格视图:

    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()
    

如何确保表格视图不跳转?

【问题讨论】:

我想我也面临同样的问题。 gif有点难以理解你在说什么。有什么方法可以创建一个短片吗?会给出很清晰的想法。 @rohan-patel 替换了demo,这个应该能更好的演示问题。 UITableView jumping to top on endUpdates while typing inside a cell on ios 8 auto height 【参考方案1】:

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

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

【讨论】:

帮我解决了这个问题!

以上是关于UITableView 在调用 reloadSections:withRowAnimation: [重复] 后跳转的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 在调用 reloadSections:withRowAnimation: [重复] 后跳转

UITableView 代表没有被调用

UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath:

UITableView 以编程方式调用滑动操作

UITableView endUpdates 在 vi​​ewDidLoad 中调用时崩溃

在 UITableView 中点击已选择的单元格时,将调用 willSelectCellAtIndexPath