From 079e764f13588b413560a9e020f46fb007708b38 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 18 Nov 2021 17:09:42 -0600 Subject: [PATCH] Enable prefetching on iOS 15 to improve Timeline scrolling speed --- .../MasterTimelineViewController.swift | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MasterTimeline/MasterTimelineViewController.swift index 83ec38ea6..808737c34 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MasterTimeline/MasterTimelineViewController.swift @@ -83,10 +83,6 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner iconSize = AppDefaults.shared.timelineIconSize resetEstimatedRowHeight() - if #available(iOS 15, *) { - tableView.isPrefetchingEnabled = false - } - if let titleView = Bundle.main.loadNibNamed("MasterTimelineTitleView", owner: self, options: nil)?[0] as? MasterTimelineTitleView { navigationItem.titleView = titleView } @@ -579,8 +575,12 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner } @objc private func reloadAllVisibleCells() { - let visibleArticles = tableView.indexPathsForVisibleRows!.compactMap { return dataSource.itemIdentifier(for: $0) } - reloadCells(visibleArticles) + if #available(iOS 15, *) { + reconfigureCells(coordinator.articles) + } else { + let visibleArticles = tableView.indexPathsForVisibleRows!.compactMap { return dataSource.itemIdentifier(for: $0) } + reloadCells(visibleArticles) + } } private func reloadCells(_ articles: [Article]) { @@ -590,6 +590,15 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner self?.restoreSelectionIfNecessary(adjustScroll: false) } } + + private func reconfigureCells(_ articles: [Article]) { + guard #available(iOS 15, *) else { return } + var snapshot = dataSource.snapshot() + snapshot.reconfigureItems(articles) + dataSource.apply(snapshot, animatingDifferences: false) { [weak self] in + self?.restoreSelectionIfNecessary(adjustScroll: false) + } + } // MARK: Cell Configuring