From 877391ec6bdf272732a55a7b8e4fde4ed0ecdaac Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sun, 24 Oct 2021 12:45:45 -0500 Subject: [PATCH] Fix flickering that happens when unread counts come in to fast --- iOS/MasterFeed/MasterFeedViewController.swift | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MasterFeed/MasterFeedViewController.swift index 3bd93dcd7..7a4711d76 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MasterFeed/MasterFeedViewController.swift @@ -44,6 +44,8 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { override var canBecomeFirstResponder: Bool { return true } + + private var reloadCoalescingQueue = CoalescingQueue(name: "Reload Visible", interval: 0.5) override func viewDidLoad() { @@ -113,16 +115,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { return } - var node: Node? = nil - if let coordinator = representedObject as? SceneCoordinator, let feed = coordinator.timelineFeed { - node = coordinator.rootNode.descendantNodeRepresentingObject(feed as AnyObject) - } else { - node = coordinator.rootNode.descendantNodeRepresentingObject(representedObject as AnyObject) - } - - guard let unreadCountNode = node, let indexPath = coordinator.indexPathFor(unreadCountNode) else { return } - tableView.reloadRows(at: [indexPath], with: .none) - restoreSelectionIfNecessary(adjustScroll: false) + queueReloadAllVisible() } @objc func faviconDidBecomeAvailable(_ note: Notification) { @@ -840,6 +833,14 @@ private extension MasterFeedViewController { return "" } + func queueReloadAllVisible() { + reloadCoalescingQueue.add(self, #selector(reloadQueuedAllVisible)) + } + + @objc func reloadQueuedAllVisible() { + reloadAllVisibleCells() + } + func configureCellsForRepresentedObject(_ representedObject: AnyObject) { applyToCellsForRepresentedObject(representedObject, configure) }