带有beginUpdates()跳转的UITableView

时间:2017-12-28 09:55:05

标签: ios uitableview core-data nsfetchedresultscontroller

我使用典型的CoreData组合 - NSFetchedResultsController - UITableViewController。 当我使用时:

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
  self.tableView.beginUpdates()
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
  self.tableView.endUpdates()
}

通过更新数据源中的一个项目(无插入或删除),有时,tableView无缘无故地上下跳动。

如果我有一些单元格,不足以填满桌面视图,它就不会反弹。

如果我有更多的单元格来滚动tableview,它就不会反弹。

但是,如果我有足够的单元格来填充tableview,那么它就会反弹。

如果我删除了beginUpdates()endUpdates(),则没有随机反弹,但是我放弃了begin / endUpdates()的优点。

  

可以看到预览hereover here

可能导致什么?以及如何解决它?

2 个答案:

答案 0 :(得分:0)

在iOS 11上类似的问题,替换为[tableView performBatchUpdates:nil completion:nil];解决问题..

答案 1 :(得分:-1)

    tableView.beginUpdates()
    tableView.endUpdates()
    tableView.scrollToRow(at: indexPath, at: .top, animated: true)