From ef84acc02d97e4f319947a50cfafc3824eb8c838 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Wed, 13 Nov 2019 15:31:14 -0600 Subject: [PATCH] Implement better scroll interference avoidance strategy. --- iOS/MasterFeed/MasterFeedViewController.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MasterFeed/MasterFeedViewController.swift index 561a7ee20..334ebbeff 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MasterFeed/MasterFeedViewController.swift @@ -99,11 +99,17 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { node = coordinator.rootNode.descendantNodeRepresentingObject(representedObject as AnyObject) } - if let node = node, dataSource.indexPath(for: node) != nil { - // This can stop the scrolling of the disclose function if we don't delay it enough to complete - DispatchQueue.main.asyncAfter(deadline: .now() + 0.7) { + // Only do the reload of the node when absolutely necessary. It can stop programatic scrolling from + // completing if called to soon after a selectRow where scrolling is necessary. See discloseFeed. + if let node = node, + let indexPath = dataSource.indexPath(for: node), + let cell = tableView.cellForRow(at: indexPath) as? MasterFeedTableViewCell, + let unreadCountProvider = node.representedObject as? UnreadCountProvider { + + if cell.unreadCount != unreadCountProvider.unreadCount { self.reloadNode(node) } + } }