Question or problem with Swift language programming:
I’m trying to change the color of my navigator bar but I found that it’s only impossible if the navigator is the root one.
I’m trying this:
self.navigationController?.navigationBar.translucent = true self.navigationController!.navigationBar.barTintColor = UIColor.blueColor()
All my Viewcontrollers are related to navigator controllers. However nothing is changed. In fact I tried to make the same things from storyboard but it works only if I’m in the first navigator.
I tried to read everything related to this problem but found nothing
I could add any item to the navigator bar like this
let HomeImage = UIImage(named: "home")! let Home : UIBarButtonItem = UIBarButtonItem(image: HomeImage, style: .Plain, target: self, action: "home:") navigationItem.rightBarButtonItem = Home
How to solve the problem:
Solution 1:
In fact, i found that the solution was to use in the AppDelegate.siwft
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. UINavigationBar.appearance().barTintColor = UIColor(red: 0, green: 0/255, blue: 205/255, alpha: 1) UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] return true }
and then in each view controller, that we need another background color or something else
-
the segue should be different than “show”
-
use the func
viewWillAppear
override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor() self.navigationController?.navigationBar.tintColor = UIColor.blueColor() self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()] }
Solution 2:
Updated for Swift 3
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 5
UINavigationBar.appearance().barTintColor = .black UINavigationBar.appearance().tintColor = .white UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] UINavigationBar.appearance().isTranslucent = false
Solution 3:
Swift 4.2:
//To change Navigation Bar Background Color UINavigationBar.appearance().barTintColor = UIColor.blue //To change Back button title & icon color UINavigationBar.appearance().tintColor = UIColor.white //To change Navigation Bar Title Color UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Swift 3.x:
//To change Navigation Bar Background Color UINavigationBar.appearance().barTintColor = UIColor.blue //To change Back button title & icon color UINavigationBar.appearance().tintColor = UIColor.white //To change Navigation Bar Title Color UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Solution 4:
For changing the navigation bar theme color throughout the full app you can do this by using UiNavigation bar appearance.
UINavigationBar.appearance().barTintColor = UIColor.redColor()
Solution 5:
If your view controller is embedded in navigation controller then you can remove this default navigation bar and can use a custom navigation bar for that view controller.
Then you can do look like
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0)