在 Swift 中更改导航栏的颜色

Changing the Color of Navigation Bar in Swift

我的 ViewController 中有一个 MKMap,我允许我的用户在 "Standard"、"Hybrid" 和 "Satellite" 之间切换地图类型 - 就像在地图中一样应用程序。就像在地图应用程序中一样,我有一个底栏,然后在顶部有一个导航栏。当用户在地图类型之间切换时,"Hybrid" 和 "Satellite" 栏应更改为黑色背景和白色按钮,“标准”栏应更改为白色背景和蓝色按钮。

我可以正确更改底部栏的颜色,但根本无法更改导航栏。这是我在用户更改地图类型时的功能:

func changeMapType(sender:UISegmentedControl){
    if mapType.selectedSegmentIndex == 0{
        mapView.mapType = MKMapType.Standard
        toolbar.barTintColor = UIColor(red:1.0, green:1.0, blue:1.0, alpha:1.0)
        toolbar.tintColor = UIColor(red:0.0, green:122.0/255.0, blue:1.0, alpha:1.0)
        self.navigationController?.navigationBar.translucent = false
        self.navigationController?.navigationBar.barTintColor = UIColor(red:1.0, green:1.0, blue:1.0, alpha:1.0)
        self.navigationController?.navigationBar.tintColor = UIColor(red:0.0, green:122.0/255.0, blue:1.0, alpha:1.0)

        defaults.setValue("Standard", forKey: "initialMapType")
    }
    else if mapType.selectedSegmentIndex == 1{
        mapView.mapType = MKMapType.Hybrid
        toolbar.barTintColor = UIColor.blackColor()
        toolbar.tintColor = UIColor.whiteColor()
        self.navigationController?.navigationBar.translucent = false
        self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
        self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()

    defaults.setValue("Hybrid", forKey: "initialMapType")

}
else if mapType.selectedSegmentIndex == 2{
    mapView.mapType = MKMapType.Satellite
    toolbar.barTintColor = UIColor.blackColor()
    toolbar.tintColor = UIColor.whiteColor()
    self.navigationController?.navigationBar.translucent = false
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()

    defaults.setValue("Satellite", forKey: "initialMapType")
}

}

有谁知道我必须做些什么才能让我的导航栏改变颜色?

很有可能是因为你的self.navigationController是空的。先试试看!这是非常普遍的问题。也许您是从实际上没有 NC 的错误视图控制器调用它的。您可以使用 .appearance() 接口解决该问题,如下所示:

更改栏色调颜色(导航栏背景):

UINavigationBar.appearance().barTintColor = UIColor.whiteColor()

要更改文本的颜色:

UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.whiteColor()]

请注意,这会更改整个应用程序的导航栏(基本上,外观是更改默认设置的方式),因此它可能不合适。有兴趣的可以在这里read more about appearance.

希望对您有所帮助!

编辑:检查空导航控制器的简单方法是强制展开变量,self.navigationController!.navigationBar 而不是 ?,如果您的应用程序崩溃,您的问题就出在这里(但不要告诉任何我建议的人,因为它不是很巧妙的解决方案如何找到问题,虽然速度很快)

更新为 Swift 3、4、4.2、5+

// 设置导航栏.....

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4.2, 5+

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

也可以在这里查看:https://github.com/hasnine/iOSUtilitiesSource