Anthony Anthony -4 years ago 109
iOS Question

Swift - iOS : Change the color of a Navigation Bar

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
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

Answer Source

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

  1. the segue should be deferent than "show"

  2. use the func viewWillAppear

     override func viewWillAppear(animated: Bool) {
    self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
    self.navigationController?.navigationBar.tintColor = UIColor.blueColor()
    self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]


Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download