diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MasterTimeline/MasterTimelineViewController.swift index b45e29d44..a8adc7daf 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MasterTimeline/MasterTimelineViewController.swift @@ -73,7 +73,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner navigationItem.titleView = titleView } - resetUI() + resetUI(resetScroll: true) applyChanges(animated: false) // Restore the scroll position if we have one stored @@ -163,8 +163,8 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner } } - func reinitializeArticles() { - resetUI() + func reinitializeArticles(resetScroll: Bool) { + resetUI(resetScroll: resetScroll) } func reloadArticles(animated: Bool) { @@ -502,7 +502,7 @@ extension MasterTimelineViewController: UISearchBarDelegate { private extension MasterTimelineViewController { - func resetUI() { + func resetUI(resetScroll: Bool) { title = coordinator.timelineFeed?.nameForDisplay ?? "Timeline" @@ -535,7 +535,7 @@ private extension MasterTimelineViewController { } tableView.selectRow(at: nil, animated: false, scrollPosition: .top) - if dataSource.snapshot().itemIdentifiers(inSection: 0).count > 0 { + if resetScroll && dataSource.snapshot().itemIdentifiers(inSection: 0).count > 0 { tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: false) } diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 6eee82719..e863919c9 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -436,7 +436,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { @objc func containerChildrenDidChange(_ note: Notification) { if timelineFetcherContainsAnyPseudoFeed() || timelineFetcherContainsAnyFolder() { - refreshTimeline() + refreshTimeline(resetScroll: false) } rebuildBackingStores() } @@ -460,7 +460,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { if timelineFetcherContainsAnyPseudoFeed() { fetchAndReplaceArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles() + self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores() { expandNewlyActivatedAccount() } @@ -483,7 +483,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { if timelineFetcherContainsAnyPseudoFeed() { fetchAndReplaceArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles() + self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores() { expandNewAccount() } @@ -505,7 +505,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { if timelineFetcherContainsAnyPseudoFeed() { fetchAndReplaceArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles() + self.masterTimelineViewController?.reinitializeArticles(resetScroll: false) self.rebuildBackingStores() { cleanupAccount() } @@ -562,9 +562,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { return 0 } - func refreshTimeline() { + func refreshTimeline(resetScroll: Bool) { fetchAndReplaceArticlesAsync(animated: true) { - self.masterTimelineViewController?.reinitializeArticles() + self.masterTimelineViewController?.reinitializeArticles(resetScroll: resetScroll) } } @@ -582,14 +582,14 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { if let feedID = timelineFeed?.feedID { readFilterEnabledTable[feedID] = false } - refreshTimeline() + refreshTimeline(resetScroll: false) } func hideReadArticles() { if let feedID = timelineFeed?.feedID { readFilterEnabledTable[feedID] = true } - refreshTimeline() + refreshTimeline(resetScroll: false) } func isExpanded(_ node: Node) -> Bool { @@ -764,7 +764,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { func endSearching() { if let ip = currentFeedIndexPath, let node = nodeFor(ip), let feed = node.representedObject as? Feed { timelineFeed = feed - masterTimelineViewController?.reinitializeArticles() + masterTimelineViewController?.reinitializeArticles(resetScroll: true) replaceArticles(with: savedSearchArticles!, animated: true) } else { setTimelineFeed(nil, animated: true) @@ -1264,7 +1264,7 @@ private extension SceneCoordinator { timelineMiddleIndexPath = nil fetchAndReplaceArticlesAsync(animated: animated) { - self.masterTimelineViewController?.reinitializeArticles() + self.masterTimelineViewController?.reinitializeArticles(resetScroll: true) completion?() } }