更改UINavigationController的颜色和字体

时间:2018-06-26 08:17:00

标签: ios swift uinavigationcontroller uinavigationbar

我正在这样写我的应用路由器:

final class AppRouter {

    let navigationController: UINavigationController

    init(window: UIWindow) {
        navigationController = UINavigationController()
        window.rootViewController = navigationController
...
}

我正在使用application:didFinishLaunchingWithOptions:方法调用路由器初始化程序。

我试图通过使用UINavigationBar.appearance()更改其属性,子属性来更改其样式(颜色,字体和其他)

没有任何效果。我将translucent设置为false。只有情节提要板更改才起作用,但是然后我有了基于情节提要的导航,这是我不想拥有的。 我已经看到很多有关此问题的帖子,没有任何帮助。

如果有人拥有适用于最新iOS(当前为11.4)的菜谱,请分享!

编辑:

就像我说的那样进行更改:

UINavigationBar.appearance().barTintColor = color
UINavigationBar.appearance().isTranslucent = false 

这在didFinishLaunching中使用。

或在构造函数中:

navigationController.navigationBar.barTintColor = color

这两种方法均无法设置导航控制器栏的颜色。

编辑2: 应用程序委托调用:

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

    let window = UIWindow(frame: UIScreen.main.bounds)
    self.window = window
    window.makeKeyAndVisible()
    appRouter = AppRouter(window: window)
    return true
}

1 个答案:

答案 0 :(得分:1)

将以下扩展名用于UINavigationController

     extension UINavigationController
     {
        func setMainTopNavigationBarAttribute() -> Void
        {

             self.navigationBar.shadowImage     = UIImage()
             self.navigationBar.isTranslucent   = false
             self.navigationBar.barTintColor    = UIColor.black
             self.navigationBar.tintColor       = UIColor.white
             self.navigationBar.backgroundColor = UIColor.clear
            let navBarAttributesDictionary: [NSAttributedStringKey: Any]? = [
            NSAttributedStringKey.foregroundColor: UIColor.black,
            NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 18.0)
        ]
        self.navigationBar.titleTextAttributes = navBarAttributesDictionary
         }
      }

    final class AppRouter {

        let navigationController: UINavigationController

        init(window: UIWindow) {
            navigationController = UINavigationController()
            window.rootViewController = navigationController
            navigationController.setMainTopNavigationBarAttribute() 
    }