在 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
我的 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