From 8eee73cf26ecbd2be88ee257495f099fe34faaac Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Sat, 18 Jan 2025 15:11:08 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20Fixes=20incorrect=20refresh=20co?= =?UTF-8?q?ntrol=20visibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Makes `TimelineViewController` a `UISplitViewControllerDelegate`. When the display mode is such that the feeds, timeline and article are visible, the timeline refresh control is hidden. When the display mode is such that the timeline and article are visible, the timeline refresh control is visible. --- .../MainTimelineViewController.swift | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/iOS/MainTimeline/MainTimelineViewController.swift b/iOS/MainTimeline/MainTimelineViewController.swift index ec29cf558..a425f82a9 100644 --- a/iOS/MainTimeline/MainTimelineViewController.swift +++ b/iOS/MainTimeline/MainTimelineViewController.swift @@ -59,7 +59,10 @@ class MainTimelineViewController: UITableViewController, UndoableCommandRunner { NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange), name: UIContentSizeCategory.didChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange), name: .DisplayNameDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) - + + // Split View Controller Delegate + splitViewController?.delegate = self + // Initialize Programmatic Buttons filterButton = UIBarButtonItem(image: AppAssets.filterInactiveImage, style: .plain, target: self, action: #selector(toggleFilter(_:))) firstUnreadButton = UIBarButtonItem(image: AppAssets.nextUnreadArticleImage, style: .plain, target: self, action: #selector(firstUnread(_:))) @@ -600,11 +603,44 @@ extension MainTimelineViewController: UISearchBarDelegate { } } +extension TimelineViewController: UISplitViewControllerDelegate { + + func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) { + switch displayMode { + case .automatic: + return + case .secondaryOnly: + return + case .oneBesideSecondary: + // Timeline + Article - show the refresh control on the timeline + self.toolbarItems?[2].customView?.alpha = 1.0 + case .oneOverSecondary: + return + case .twoBesideSecondary: + return + case .twoOverSecondary: + return + case .twoDisplaceSecondary: + // Sidebar + Timeline + Article - hide the refresh control on the timeline + self.toolbarItems?[2].customView?.alpha = 0.0 + case .primaryHidden: + return + case .allVisible: + return + case .primaryOverlay: + return + @unknown default: + return + } + } + +} + // MARK: Private private extension MainTimelineViewController { - func configureToolbar() { + func configureToolbar() { guard !(splitViewController?.isCollapsed ?? true) else { return }