同时设置UINavigationController的导航栏和rootViewController

Setting UINavigationController's navigation bar and rootViewController in the same time

我在尝试同时设置 UINavigationControllerrootView UIViewController 和 UINavigationBar 时遇到了难题。似乎 UINavigationController 可以用 rootViewController 启动:

let navController = UINavigationController(rootViewController: someViewController)

或者使用 UINavigatioBar,像这样:

let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)

但是,我希望能够添加一个 rootViewController 以及一个自定义 UINavigationBar。有什么办法吗?

我尝试将 UINavigationBar 设置为 navController.navigationController?.navigationBar = MyNavigationBar 然而, navigationController?.navigationBar 似乎只是一个 getter.

rootViewController只是要显示的第一个视图控制器。虽然它似乎无法从任何地方访问,但您可以将 viewControllers 堆栈 属性 设置为一个视图控制器,即您的根。
这是一个带有便捷初始化器的扩展。

extension UINavigationController {

    convenience init(navigationBarClass: Swift.AnyClass?, toolbarClass: Swift.AnyClass?, rootViewController: UIViewController) {
        self.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
        self.viewControllers = [rootViewController]
    }

}

为什么不在创建 navController 之后设置 rootViewController?

let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
navController.viewControllers = [someRootViewController]