在Swift中更改导航栏颜色
我使用Picker View来允许用户select整个应用程序的颜色主题。 我正在计划改变导航栏的颜色,背景和可能的标签栏(如果可能的话)。 我一直在研究如何做到这一点,但找不到任何Swift的例子。 任何人都可以请给我一个我需要用来更改导航栏颜色和导航栏文本颜色的代码示例? (Picker View被设置,我只是在寻找代码来改变UI的颜色)
谢谢。
导航栏:
navigationController?.navigationBar.barTintColor = UIColor.green
用你想要的任何UIColorreplacegreenColor,如果你愿意,也可以使用RGB。
导航栏文字:
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
用你喜欢的任何颜色replaceorangeColor。
标签栏:
tabBarController?.tabBar.barTintColor = UIColor.brown
标签栏文本:
tabBarController?.tabBar.tintColor = UIColor.yellow
在最后两个,用您select的颜色replacebrownColor和yellowColor。
这里有一些非常基本的外观定制,您可以应用程序广泛:
UINavigationBar.appearance().backgroundColor = UIColor.greenColor() UIBarButtonItem.appearance().tintColor = UIColor.magentaColor() //Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()] UITabBar.appearance().backgroundColor = UIColor.yellowColor();
有关UIAppearance
API的更多信息,请参阅: https : //developer.apple.com/documentation/uikit/uiappearance
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0) UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]
只需将此行粘贴到代码中的didFinishLaunchingWithOptions
中。
在AppDelegate中 ,这已经在全球范围内改变了NavBar的格式,并删除了底线/边界(这是大多数人的问题领域),给你我想你和其他人正在寻找的东西:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR UINavigationBar.appearance().translucent = false UINavigationBar.appearance().clipsToBounds = false UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }
然后你可以设置一个Constants.swift文件,并且包含一个带有颜色和字体的Style结构体。然后,你可以添加一个tableView / pickerView到任何ViewController,并使用“availableThemes”数组来允许用户改变themeColor。
关于这个的美丽的事情是,你可以在整个应用程序中为每种颜色使用一个引用,它将基于用户select的“主题”进行更新,没有一个默认为theme1():
import Foundation import UIKit struct Style { static let availableThemes = ["Theme 1","Theme 2","Theme 3"] static func loadTheme(){ let defaults = NSUserDefaults.standardUserDefaults() if let name = defaults.stringForKey("Theme"){ // Select the Theme if name == availableThemes[0] { theme1() } if name == availableThemes[1] { theme2() } if name == availableThemes[2] { theme3() } }else{ defaults.setObject(availableThemes[0], forKey: "Theme") theme1() } } // Colors specific to theme - can include multiple colours here for each one static func theme1(){ static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) } static func theme2(){ static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) } static func theme3(){ static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...
UINavigationBar.appearance().barTintColor
为我工作
使用外观API和barTintColor颜色。
UINavigationBar.appearance().barTintColor = UIColor.greenColor()
外观()函数不总是为我工作。 所以我更喜欢创build一个NC对象并改变其属性。
var navBarColor = navigationController!.navigationBar navBarColor.barTintColor = UIColor(red: 255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0) navBarColor.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
另外,如果你想添加一个图像,而不是只是文本,这也适用
var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70)) imageView.contentMode = .ScaleAspectFit var image = UIImage(named: "logo") imageView.image = image navigationItem.titleView = imageView
iOS 8(swift)
let font: UIFont = UIFont(name: "fontName", size: 17) let color = UIColor.backColor() self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)
在Swift 2中
要更改导航栏中的颜色,
navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
要更改项目导航栏中的颜色,
navigationController?.navigationBar.tintColor = UIColor.blueColor()
要么
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
iOS 10 Swift 3.0
如果你不介意使用swift框架,那么我们UINeraida将导航背景改为UIColor
或者HexColor
或者UIImage
并且以编程的方式改变导航返回button文本,改变完整的forground文字颜色。
对于UINavigationBar
neraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self) //Change navigation title, backbutton colour neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self) //Change navigation back button title programmatically neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self) //Apply Background Image to the UINavigationBar neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)
如果你有自定义的导航控制器,你可以使用上面的代码片段。 所以在我的情况下,我用下面的代码片断。
Swift 3.0,XCode 8.1版本
navigationController.navigationBar.barTintColor = UIColor.green
导航栏文字:
navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
这是非常有帮助的谈判。
Swift 3
UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)
这将设置您的导航栏颜色像Facebook栏颜色:)
要在故事板上执行此操作(Interface Builder检查器)
在IBDesignable
帮助下,我们可以添加更多选项到Interface Builder Inspector for UINavigationController
,并在storyboard上调整它们。 首先,将下面的代码添加到您的项目中。
@IBDesignable extension UINavigationController { @IBInspectable var barTintColor: UIColor? { set { guard let uiColor = newValue else { return } navigationBar.barTintColor = uiColor } get { guard let color = navigationBar.barTintColor else { return nil } return color } } }
然后简单地设置故事板上导航控制器的属性。
我必须做
UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barStyle = .Black UINavigationBar.appearance().backgroundColor = UIColor.blueColor()
否则背景颜色不会改变
首先将navigationBar的isTranslucent属性设置为false以获得所需的颜色。 然后像这样改变navigationBar的颜色:
@IBOutlet var NavigationBar: UINavigationBar! NavigationBar.isTranslucent = false NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)
Swift 3
简单的你可以在ViewDidLoad()
//Change Color self.navigationController?.navigationBar.barTintColor = UIColor.red //Change Text Color self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Swift 3和Swift 4兼容的Xcode 9
一个更好的解决scheme,为此做一个普通导航栏的类
我有5个控制器,每个控制器标题更改为橙色。 由于每个控制器有5个导航控制器,所以我不得不从检查员或代码中改变每一种颜色。
所以我做了一个类,而不是改变每一个导航栏从代码我只是分配这个类,它的工作全部5控制器代码重用能力。 你只需要将这个类分配给每个控制器就可以了。
import UIKit class NabigationBar: UINavigationBar { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonFeatures() } func commonFeatures() { self.backgroundColor = UIColor.white; UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor] } }