每秒重新加载 Tableview 部分会导致闪烁
Posted
技术标签:
【中文标题】每秒重新加载 Tableview 部分会导致闪烁【英文标题】:Reloading the Tableview section after every second is causing flickering 【发布时间】:2019-05-07 07:35:07 【问题描述】:我正在尝试每秒用新的数据源重新加载我的 Tableview,但是在重新加载时会有轻微的闪烁,用户可以清楚地看到。
我要求每秒刷新一次数据源是因为我每秒都从 API 获取新的服务器时间。
我使用以下不同的方法重新加载了我的 tableView 的 3 个部分,但现在似乎提供了无闪烁的体验。
方法一
UIView.performWithoutAnimation
UIView.setAnimationsEnabled(false)
weakSelf.tradeTableView.reloadSections([0,1,2], with: .none)
方法二
UIView.setAnimationsEnabled(false)
weakSelf.tradeTableView.beginUpdates()
weakSelf.tradeTableView.reloadSections([0,1,2], with: .none)
weakSelf.tradeTableView.endUpdates()
UIView.setAnimationsEnabled(true)
两种方法都提供闪烁体验。
【问题讨论】:
为什么你需要每秒更新你的部分? 正如我所提到的,我每秒从服务器获取更新的服务器时间,这就是为什么我需要更新 tableview 部分以反映这些更改。 如果您只添加数据,您可以插入行而不是重新加载所有数据。 嗨 Samarth 可以在 performWithoutAnimation 块中尝试 tradeTableView.layer.removeAllAnimations(),我也更喜欢使用 rxswift 来处理这种事情,因为你每秒都在重新加载 tableview,这并不好,希望它有所帮助:P @ShivamGaur 我收到了使用 RxSwift 的建议,请您指导我 【参考方案1】:是闪烁还是跳跃?
如果滚动视图跳转检查这些答案Jumpy tableview after reload
【讨论】:
【参考方案2】:这个这个
let loc = tradeTableView.contentOffset // this line is added to lock offset of tableview
UIView.performWithoutAnimation
tradeTableView.beginUpdates()
tradeTableView.reloadData()
tradeTableView.endUpdates()
tradeTableView.layer.removeAllAnimations()
tradeTableView.setContentOffset(loc, animated: false)
【讨论】:
【参考方案3】:你可以试试这个
UIView.setAnimationsEnabled(false)
self.tradeTableView.beginUpdates()
self.tradeTableView.endUpdates()
UIView.setAnimationsEnabled(true)
【讨论】:
以上是关于每秒重新加载 Tableview 部分会导致闪烁的主要内容,如果未能解决你的问题,请参考以下文章
自定义 TableViewCells 在重新加载 tableview 时闪烁
如何在 swift 中仅为唯一值更新 TableView 行?
firebase 删除值导致 tableview 重新加载元素的两倍