Browse Source

modernize scene

master
marcoschmickler 1 week ago
parent
commit
5f41b0da1b
  1. 67
      kplayer/SceneDelegate.swift

67
kplayer/SceneDelegate.swift

@ -23,18 +23,65 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDe
}
private func setupSplitViewController() {
guard let split = window?.rootViewController as? UISplitViewController else { return }
guard let storyboardSplit = window?.rootViewController as? UISplitViewController else { return }
let split = installModernSplitViewIfNeeded(storyboardSplit)
let detailNav = split.viewControllers[split.viewControllers.count - 1] as! UINavigationController
detailNav.topViewController!.navigationItem.leftBarButtonItem = split.displayModeButtonItem
configureSplitViewDisplay(split)
split.delegate = self
let masterNav = split.viewControllers[0] as! UINavigationController
let controller = masterNav.topViewController as! MasterViewController
let detailNav = detailNavigationController(in: split)
detailNav?.topViewController?.navigationItem.leftBarButtonItem = nil
guard let masterNav = masterNavigationController(in: split),
let controller = masterNav.topViewController as? MasterViewController else { return }
controller.delegate = NetworkDelegate()
controller.model.items = LocalManager.sharedInstance.model!.items
}
private func installModernSplitViewIfNeeded(_ split: UISplitViewController) -> UISplitViewController {
guard split.style == .unspecified,
let primary = split.viewControllers.first,
let secondary = split.viewControllers.last else {
return split
}
let modernSplit = UISplitViewController(style: .doubleColumn)
modernSplit.setViewController(primary, for: .primary)
modernSplit.setViewController(secondary, for: .secondary)
window?.rootViewController = modernSplit
return modernSplit
}
private func configureSplitViewDisplay(_ split: UISplitViewController) {
split.minimumPrimaryColumnWidth = 280
split.maximumPrimaryColumnWidth = 380
split.preferredPrimaryColumnWidthFraction = 0.30
guard UIDevice.current.userInterfaceIdiom == .pad else {
split.preferredDisplayMode = .automatic
return
}
split.preferredSplitBehavior = .tile
split.preferredDisplayMode = .oneBesideSecondary
}
private func masterNavigationController(in split: UISplitViewController) -> UINavigationController? {
if split.style == .doubleColumn {
return split.viewController(for: .primary) as? UINavigationController
}
return split.viewControllers.first as? UINavigationController
}
private func detailNavigationController(in split: UISplitViewController) -> UINavigationController? {
if split.style == .doubleColumn {
return split.viewController(for: .secondary) as? UINavigationController
}
return split.viewControllers.last as? UINavigationController
}
// MARK: - Split view
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
@ -45,4 +92,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDe
}
return false
}
func splitViewController(_ svc: UISplitViewController, displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode) -> UISplitViewController.DisplayMode {
configureSplitViewDisplay(svc)
if UIDevice.current.userInterfaceIdiom == .pad {
return .oneBesideSecondary
}
return proposedDisplayMode
}
}
Loading…
Cancel
Save