UIViewController with its own navigation bar. It provides smooth push animations between view controllers which have different navigation bar styles.

uiviewcontroller navigationbar mov

At a Glance

Override hasCustomNavigationBar method to use custom navigation bar. Then you can use navigationBar property on UIViewController.

class MyViewController: UIViewController {

    override func hasCustomNavigationBar() -> Bool {
        return true // I'm gonna use custom navigation bar!
    }

}

let viewController = MyViewController()
viewController.navigationBar.barTintColor = .purpleColor() // Use custom navigation bar
viewController.navigationItem.title = "Hello" // Change navigationItem property

Note: Don't confuse with UINavigationController's navigationBar.

Hiding System Navigation Bar

With UIViewController+NavigationBar, you have to do something additional to make system navigation bar hidden.

class MyViewController: UIViewController {

    /// Override this method to make built-in navigation bar hidden
    override func prefersNavigationBarHidden() -> Bool {
        return true
    }

}

Installation

I recommend you to use CocoaPods with Podfile:

pod 'UIViewController+NavigationBar'

License

UIViewController+NavigationBar is under MIT license. See the LICENSE file for more info.