diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 78f0e6ad8..1907dbac1 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -44,7 +44,7 @@ class ArticleViewController: UIViewController { var article: Article? { didSet { if let controller = currentWebViewController, controller.article != article { - controller.article = article + controller.setArticle(article) DispatchQueue.main.async { // You have to set the view controller to clear out the UIPageViewController child controller cache. // You also have to do it in an async call or you will get a strange assertion error. @@ -103,7 +103,7 @@ class ArticleViewController: UIViewController { view.bottomAnchor.constraint(equalTo: pageViewController.view.bottomAnchor) ]) - let controller = createWebViewController(article) + let controller = createWebViewController(article, updateView: false) if let state = restoreState { controller.extractedArticle = state.extractedArticle controller.isShowingExtractedArticle = state.isShowingExtractedArticle @@ -329,11 +329,11 @@ extension ArticleViewController: UIPageViewControllerDelegate { private extension ArticleViewController { - func createWebViewController(_ article: Article?) -> WebViewController { + func createWebViewController(_ article: Article?, updateView: Bool = true) -> WebViewController { let controller = WebViewController() controller.coordinator = coordinator controller.delegate = self - controller.article = article + controller.setArticle(article, updateView: updateView) return controller } diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift index 1000d771e..5e04ea578 100644 --- a/iOS/Article/WebViewController.swift +++ b/iOS/Article/WebViewController.swift @@ -57,18 +57,7 @@ class WebViewController: UIViewController { weak var coordinator: SceneCoordinator! weak var delegate: WebViewControllerDelegate? - var article: Article? { - didSet { - stopArticleExtractor() - if article?.webFeed?.isArticleExtractorAlwaysOn ?? false { - startArticleExtractor() - } - if article != oldValue { - windowScrollY = 0 - loadWebView() - } - } - } + private(set) var article: Article? let scrollPositionQueue = CoalescingQueue(name: "Article Scroll Position", interval: 0.3, maxInterval: 1.0) var windowScrollY = 0 @@ -114,6 +103,22 @@ class WebViewController: UIViewController { // MARK: API + func setArticle(_ article: Article?, updateView: Bool = true) { + stopArticleExtractor() + + if article != self.article { + self.article = article + if updateView { + if article?.webFeed?.isArticleExtractorAlwaysOn ?? false { + startArticleExtractor() + } + windowScrollY = 0 + loadWebView() + } + } + + } + func focus() { webView?.becomeFirstResponder() }