【问题标题】:Changing the Color of Navigation Bar in Swift在 Swift 中更改导航栏的颜色
【发布时间】:2015-11-03 20:37:36
【问题描述】:

我的 ViewController 中有一个 MKMap,我允许我的用户在“标准”、“混合”和“卫星”之间切换地图类型 - 就像在地图应用中一样。就像在地图应用程序中一样,我有一个底部栏,然后我在顶部有一个导航栏。当用户在地图类型之间切换时,“混合”和“卫星”的条形应变为带有白色按钮的黑色背景,“标准”将变为带有蓝色按钮的白色背景。

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

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")
}

}

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

【问题讨论】:

  • 你说你有一个导航栏。但您实际上是在导航控制器中吗?
  • 是的,我在导航控制器中。
  • 好吧,实际上,既然你说我回去检查了,结果我不知何故在另一个导航控制器中有一个导航控制器,这就是导致问题的原因。我删除了它,我的导航栏现在工作得很好。我觉得很愚蠢,我被困了一段时间。非常感谢您的帮助!

标签: ios swift uinavigationbar tintcolor bartintcolor


【解决方案1】:

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

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

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

改变文字颜色:

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

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

希望对你有帮助!

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

【讨论】:

  • 是的,这是我的 NC 的问题。我不知何故在另一个导航控制器中有一个导航控制器,这就是导致我的问题的原因。我删除了它,它现在工作得很好。非常感谢您的帮助!
【解决方案2】:

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

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

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

斯威夫特 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

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2021-01-01
    • 2016-06-28
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多