UISplitView MasterViewController and navigation issue

I am updating an existing application to enable SplitView for iPads.

I have work with UITabBar, but I have a problem with my masterViewController, as it generates a "duplicate" navigation bar that covers my existing navigation elements on all masterViewControllers (tabs), including searchBar in the search tab.

The code I have is:

Appdelegate

class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{

    let splitViewController = self.window!.rootViewController as! UISplitViewController
    splitViewController.delegate = self
    splitViewController.preferredPrimaryColumnWidthFraction = 0.33
    splitViewController.minimumPrimaryColumnWidth = 375
    splitViewController.preferredDisplayMode = .allVisible

    return true
}

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool {
    return true
}

The reason for this in AppDelegate I saw an example where listening to it will allow me not to require code in each of the different main types (each tab). We have not verified this yet, as we were still working on the first major species.

Master view

override func viewDidLoad()

{

    self.extendedLayoutIncludesOpaqueBars = true

    self.navigationItem.hidesBackButton = true

    // 3D Touch
    if traitCollection.forceTouchCapability == .available {
        registerForPreviewing(with: self as UIViewControllerPreviewingDelegate, sourceView: view)
        ThreeDTouch = true
    }

    self.addSwitchVewButtonToNavigationBar()
    self.addCategoryButtonToNavigationBar()

}

func addSwitchVewButtonToNavigationBar() {
    let switchButton = UIButton(type: UIButtonType.custom)

    let editImage = UIImage(named: "CollectionButton")?.withRenderingMode(.alwaysTemplate)
    switchButton.setImage(editImage, for: .normal)
    switchButton.addTarget(self, action: #selector(SpeciesViewController.onSwitchView), for: UIControlEvents.touchUpInside)
    let switchButtonFinal = UIBarButtonItem(customView:switchButton)

    self.navigationItem.rightBarButtonItem = switchButtonFinal

}

@IBAction func onSwitchView(_ sender: UIBarButtonItem)
{
    AppDelegate.getAppState().isListViewSelected = false

    let speciesColletion = storyboard?.instantiateViewController(withIdentifier: Resource.SpeciesCollectionStoryboard) as! SpeciesCollectionViewController
    self.navigationController?.viewControllers = [speciesColletion]
}

, onSwitchViewButton IB, . , addFavorite .

enter image description here

enter image description here

+6
1

, UINavigation. , master, SpeciesViewController . . UINavigation, , . :

guard let split = splitViewController, let navController = split.viewControllers.last as? UINavigationController else { return }

, , UINavigationController ( ).

EDIT: Nav:

var detailsNavigationController: UINavigationController? {
    return splitViewController?.viewControllers.last as? UINavigationController
}

Storyboard Split up NavController, red use navigationController.

+4

All Articles