UINavigationBar.appearance().tintColor 在 Swift 中不起作用

Posted

技术标签:

【中文标题】UINavigationBar.appearance().tintColor 在 Swift 中不起作用【英文标题】:UINavigationBar.appearance().tintColor does not work in Swift 【发布时间】:2015-09-24 09:28:43 【问题描述】:

我将一个文件从 Objective_c 移植到 Swift,其中的配置更改了标签栏颜色:我在 Objective-c 中使用的代码是:

UIColor* barColor=[UIColor colorWithRed:.88 green:.05 blue:.05 alpha:1];
if([self.navigationController.navigationBar respondsToSelector:@selector(barTintColor)])

    // ios7
    self.navigationController.navigationBar.barTintColor = barColor;

else

    [[UINavigationBar appearance] setTintColor:barColor];
    // older
    //self.navigationController.navigationBar.tintColor = barColor;

[super viewWillAppear:animated];

在Swift中对应的代码是:

let barColor = UIColor(red:0.88, green:0.05, blue:0.05, alpha:1)
if UIDevice.currentDevice().systemVersion.compare("8.0", options: .NumericSearch) == .OrderedDescending
    
        // iOS8+
     UINavigationBar.appearance().tintColor=barColor
     //UINavigationBar.appearance().translucent=false
    
    else
    
        self.navigationController!.navigationBar.barTintColor = barColor;
    

然而,虽然 Objective-c 代码确实改变了标签栏的颜色,但相应的 swift 代码却毫发无损,至少在模拟器上是这样。我做错了什么?

【问题讨论】:

更令人费解的是,我有一个姐妹ViewController,我在其中使用:self.navigationController!.navigationBar.barTintColor = barColor;即使在 iOS 9 上没有任何崩溃和更改标签栏的颜色。如果我在 iOS 9 上的原始视图控制器中使用那段代码,我会崩溃,并且替代代码没有效果。 【参考方案1】:

问题是由于导航栏未在 ViewWillAppear 时间初始化,可能是因为 IOS 9 错误。我通过有选择地访问它解决了这个问题:

self.navigationController?.navigationBar.barTintColor = barColor;

此代码在 iOS7+ 中很好,因此不需要条件。

【讨论】:

【参考方案2】:

外观设置应在应用程序启动时应用。 所以最好设置:

UINavigationBar.appearance().tintColor = barColor

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

  UINavigationBar.appearance().tintColor=barColor
  return true

【讨论】:

以上是关于UINavigationBar.appearance().tintColor 在 Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章