From 78251e9a50de98972d51e2b0c23ff72d3b1b4876 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Sat, 13 Oct 2018 16:02:42 +0530 Subject: [PATCH] Configure the split-view controller to work in both iPhone and iPad Signed-off-by: Roopesh Chander --- .../WireGuard/UI/iOS/MainViewController.swift | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/WireGuard/WireGuard/UI/iOS/MainViewController.swift b/WireGuard/WireGuard/UI/iOS/MainViewController.swift index 25be277..e477f21 100644 --- a/WireGuard/WireGuard/UI/iOS/MainViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/MainViewController.swift @@ -20,4 +20,28 @@ class MainViewController: UISplitViewController { super.loadView() } + + override func viewDidLoad() { + self.delegate = self + + // On iPad, always show both masterVC and detailVC, even in portrait mode, like the Settings app + self.preferredDisplayMode = .allVisible + } +} + +extension MainViewController: UISplitViewControllerDelegate { + func splitViewController(_ splitViewController: UISplitViewController, + collapseSecondary secondaryViewController: UIViewController, + onto primaryViewController: UIViewController) -> Bool { + // On iPhone, if the secondaryVC (detailVC) is just a UIViewController, it indicates that it's empty, + // so just show the primaryVC (masterVC). + let detailVC = (secondaryViewController as? UINavigationController)?.viewControllers.first + let isDetailVCEmpty: Bool + if let detailVC = detailVC { + isDetailVCEmpty = (type(of: detailVC) == UIViewController.self) + } else { + isDetailVCEmpty = true + } + return isDetailVCEmpty + } }