更改 UINavigationController 颜色和字体

Posted

技术标签:

【中文标题】更改 UINavigationController 颜色和字体【英文标题】:Change UINavigationController color and font 【发布时间】:2018-06-26 08:17:00 【问题描述】:

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

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

【问题讨论】:

显示不起作用的代码+如何集成和使用AppRouter 您可以添加您的AppDelegate 代码吗? 【参考方案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() 
    

【讨论】:

我会检查的。 它工作正常,我添加了一些改进:struct NavBarStyle var shadowImage: UIImage? var isTranslucent = true var barTintColor = UIColor.orange var tintColor = UIColor.brown var backgroundColor = UIColor.clear var navBarAttributesDictionary: [NSAttributedStringKey: Any]? = [ NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 18.0)! ] extension UINavigationController func setMainTopNavigationBarAttribute(style: NavBarStyle) -> Void ...

以上是关于更改 UINavigationController 颜色和字体的主要内容,如果未能解决你的问题,请参考以下文章

更改 UINavigationController 中的视图高度

Swift:更改 UINavigationController 视图的高度

快速更改UITabBar中“更多” UINavigationController的背景颜色

更改 UINavigationController 颜色和字体

UINavigationController 背景颜色更改在 iOS 中隐藏后退按钮

更改 UINavigationController 过渡效果的正确方法是啥