tableview.reloadrows flickers如果在另一个表更新之后过快地调用



该视频演示了我视觉上的问题。

每隔一段时间,我都称为:

self.tableView.beginUpdates()
self.tableView.insertRows(at: [indexPath], with: rowAnimation)
self.tableView.endUpdates()
self.tableView.scrollToRow(at: indexPath, at: scrollPosition, animated: true)
self.tableView.reloadRows(at: [indexPath], with: .automatic)

让我们不要过多地询问它(Inserstrows调用和即时重新载体调用)。这是在SlackTextViewController中求解错误的建议解决方案。那些好奇的错误。

现在,在其他地方,我打电话:

self.tableView.reloadRows(at: [indexPath], with: .automatic)

当我们在两种情况下处理相同的indexpath时,如果这两个块运行得太快,您会遇到闪烁。

我会发现,通过使用dispatchQueue(:asyncAfter)方法来艺术地延迟self.tableView.reloadRows(at: [indexPath], with: .automatic)的第二个呼叫。

我该如何处理?

更新:目前,我已经通过使用dispatchQueue(:asyncAfter)方法来避免比赛条件解决了这一问题。不过我想避免这种情况,所以我在搜索其他答案时继续保持下去。

基于您的评论,如果第二个呼叫发生在网络调用后的完成块中,我猜您正在使用网络调用的结果。如果是这种情况,如果您需要在单元格中进行反射的更改不会影响单元格的高度,则可以在索引路径处获取单元格,请检查它是否为nil(如果用户将其从屏幕上滚出)如果仍然可见,则直接应用更改。无需重新加载。

相关内容

最新更新