Automatically hide the overlay and only add the navigation controller to detail views when not collapsed

This commit is contained in:
Maurice Parker 2019-07-26 16:26:22 -05:00
parent 306af515ea
commit 59537c5705
2 changed files with 38 additions and 20 deletions

View File

@ -41,7 +41,7 @@ class AppCoordinator: NSObject, UndoableCommandRunner {
}
private var isThreePane: Bool {
return rootSplitViewController.traitCollection.horizontalSizeClass == .regular
return !rootSplitViewController.isCollapsed && rootSplitViewController.displayMode == .allVisible
}
private let fetchAndMergeArticlesQueue = CoalescingQueue(name: "Fetch and Merge Articles", interval: 0.5)
@ -215,6 +215,10 @@ class AppCoordinator: NSObject, UndoableCommandRunner {
masterFeedViewController.coordinator = self
masterNavigationController.pushViewController(masterFeedViewController, animated: false)
let systemMessageViewController = UIStoryboard.main.instantiateController(ofType: SystemMessageViewController.self)
let controller = addNavControllerIfNecessary(systemMessageViewController, split: rootSplitViewController, showBackButton: true)
rootSplitViewController.showDetailViewController(controller, sender: self)
return rootSplitViewController
}
@ -459,15 +463,19 @@ class AppCoordinator: NSObject, UndoableCommandRunner {
let detailViewController = UIStoryboard.main.instantiateController(ofType: DetailViewController.self)
detailViewController.coordinator = self
let detailNavController = UINavigationController(rootViewController: detailViewController)
detailNavController.isToolbarHidden = false
detailViewController.navigationItem.leftBarButtonItem = targetSplit.displayModeButtonItem
detailViewController.navigationItem.leftItemsSupplementBackButton = true
let showBackButton = rootSplitViewController.displayMode != .allVisible
let controller = addNavControllerIfNecessary(detailViewController, split: targetSplit, showBackButton: showBackButton)
currentArticleIndexPath = indexPath
// rootSplitViewController.toggleMasterView()
targetSplit.showDetailViewController(detailNavController, sender: self)
targetSplit.showDetailViewController(controller, sender: self)
}
// Automatically hide the overlay
if rootSplitViewController.displayMode == .primaryOverlay {
UIView.animate(withDuration: 0.3) {
self.rootSplitViewController.preferredDisplayMode = .primaryHidden
}
rootSplitViewController.preferredDisplayMode = .automatic
}
}
@ -583,11 +591,11 @@ class AppCoordinator: NSObject, UndoableCommandRunner {
extension AppCoordinator: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
if isThreePane && navigationController.viewControllers.count == 1 {
if rootSplitViewController.isCollapsed != true && navigationController.viewControllers.count == 1 {
let systemMessageViewController = UIStoryboard.main.instantiateController(ofType: SystemMessageViewController.self)
systemMessageViewController.navigationItem.leftBarButtonItem = rootSplitViewController.displayModeButtonItem
systemMessageViewController.navigationItem.leftItemsSupplementBackButton = true
rootSplitViewController.showDetailViewController(systemMessageViewController, sender: self)
let showBackButton = rootSplitViewController.displayMode != .allVisible
let controller = addNavControllerIfNecessary(systemMessageViewController, split: rootSplitViewController, showBackButton: showBackButton)
rootSplitViewController.showDetailViewController(controller, sender: self)
}
}
@ -829,13 +837,30 @@ private extension AppCoordinator {
// MARK: Double Split
func addNavControllerIfNecessary(_ controller: UIViewController, split: UISplitViewController, showBackButton: Bool) -> UIViewController {
if split.isCollapsed {
return controller
} else {
let navController = UINavigationController(rootViewController: controller)
navController.isToolbarHidden = false
if showBackButton {
controller.navigationItem.leftBarButtonItem = split.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
return navController
}
}
func ensureDoubleSplit() -> UISplitViewController {
if let subSplit = rootSplitViewController.viewControllers.last as? UISplitViewController {
return subSplit
}
rootSplitViewController.preferredPrimaryColumnWidthFraction = 0.33
let subSplit = UISplitViewController.template()
subSplit.delegate = self
subSplit.preferredDisplayMode = .allVisible
subSplit.preferredPrimaryColumnWidthFraction = 0.5
rootSplitViewController.showDetailViewController(subSplit, sender: self)
return subSplit

View File

@ -12,7 +12,7 @@ extension UISplitViewController {
static func template() -> UISplitViewController {
let splitViewController = UISplitViewController()
splitViewController.preferredDisplayMode = .allVisible
splitViewController.preferredDisplayMode = .automatic
let navController = UINavigationController()
navController.isToolbarHidden = false
@ -21,11 +21,4 @@ extension UISplitViewController {
return splitViewController
}
func toggleMasterView() {
let barButtonItem = self.displayModeButtonItem
if let action = barButtonItem.action {
UIApplication.shared.sendAction(action, to: barButtonItem.target, from: nil, for: nil)
}
}
}