带有 beginUpdates() 的 UITableView 反弹
Posted
技术标签:
【中文标题】带有 beginUpdates() 的 UITableView 反弹【英文标题】:UITableView with beginUpdates() bounces 【发布时间】:2017-12-28 09:55:04 【问题描述】:我使用典型的组合 CoreData - NSFetchedResultsController
- UITableViewController
。
当我使用:
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
self.tableView.beginUpdates()
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
self.tableView.endUpdates()
通过更新数据源中的一项(不插入也不删除),有时,tableView 会无缘无故地上下跳动。
如果我有几个单元格,不足以填充表格视图,它不会反弹。
如果我有更多单元格来滚动表格视图,它不会反弹。
但是,如果我有足够的单元格来填充 tableview,这就是它反弹的地方。
如果我删除 beginUpdates()
和 endUpdates()
,则不会出现随机反弹,但我会失去 begin/endUpdates() 的优势。
预览可见here或over here
是什么原因造成的?以及如何解决?
【问题讨论】:
您在某处调用 tableView.reloadData() 导致此问题 设置tableView.bounces = false
我不会在任何地方打电话给tableView.reloadData()
。
tableView.bounces = false
没有修复它。
这个我试过了,不行,还在弹跳。
【参考方案1】:
在 ios 11 类似问题上,替换为 [tableView performBatchUpdates:nil completion:nil];解决问题..
【讨论】:
很抱歉,但这似乎不起作用。我到底应该把 performBatchUpdates 放在哪里?【参考方案2】: tableView.beginUpdates()
tableView.endUpdates()
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
【讨论】:
我最近在这里重新表述了这个问题:***.com/q/50981504/1126973 @nouatzi 在单元格子视图发生任何更改或通过折叠和展开调整单元格大小后 尽量避免 reloadData 只要你只改变单元格高度 你真的应该看看我最近的问题***.com/q/50981504/1126973 这个场景要简单得多。我不使用 reloadData以上是关于带有 beginUpdates() 的 UITableView 反弹的主要内容,如果未能解决你的问题,请参考以下文章
执行“beginUpdates”“endUpdates”时 UITableView 页脚视图的动画问题