web-dev-qa-db-fra.com

Barre de navigation, teinte et couleur du texte du titre dans iOS 8

Le texte d'arrière-plan dans la barre d'état est toujours noir. Comment changer la couleur en blanc?

// io8, Swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

enter image description here

149
AG1

Dans AppDelegate.Swift, dans application(_:didFinishLaunchingWithOptions:) je mets ce qui suit:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]

Pour titleTextAttributes, les docs disent:

Vous pouvez spécifier la police, la couleur du texte, la couleur de l'ombre du texte et le texte décalage de l'ombre pour le titre dans le dictionnaire des attributs de texte

271
Albert Vila Calvo

J'aime la réponse d'Alex. Si vous voulez essayer rapidement une variable ViewController, assurez-vous de l'utiliser. 

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // Swift 4.2
}

enter image description here

105
AG1

Pour changer la couleur de manière universelle, ce code doit figurer dans la fonction NavigationController de viewDidLoad:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

Pour le changer par ViewController, vous devez référencer la NavigationController à partir de la ViewController et écrire des lignes similaires dans la fonction ViewController de cette fonction viewWillAppear.

80
Alex

// Dans Swift 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
26
Flower

Pour travailler dans objective-c je dois mettre les lignes suivantes dans viewWillAppear dans mon CustomViewController.

[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTranslucent:NO];

Pour Swift2.x cela fonctionne:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor()

Pour Swift3.x cela fonctionne:

self.navigationController?.navigationBar.barTintColor = UIColor.red
16
Niko Klausnitzer

Effectuer ce travail dans le storyboard (Interface Builder Inspector)

Avec l’aide de IBDesignable, nous pouvons ajouter d’autres options à Interface Builder Inspector for UINavigationController et les ajuster sur le storyboard. Tout d’abord, ajoutez le code suivant à votre projet.

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            navigationBar.barTintColor = newValue
        }
        get {
            guard  let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

Ensuite, définissez simplement les attributs de UINavigationController sur le storyboard.

 enter image description here

10
Fangming

Si vous souhaitez définir la couleur de teinte et la couleur de barre pour l'ensemble de l'application, vous pouvez ajouter le code suivant à AppDelegate.Swift dans 

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

Les barres de navigationTintColor et tintColor sont définies

7
VirajP

Mis à jour avec Swift 4 

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}
5
Raj Joshi

Dans Swift 4.1 et Xcode 9.4.1 

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
5
iOS

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}
3
Vladimir

Swift 4.1

Ajouter une fonction à viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Dans la fonction setup(), ajoutez:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }
3
Patrick.Bellot

Définition de la couleur du texte du titre de la barre de navigation sur blanc dans Swift version 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
2
Rawand Saeed

Pour une couleur personnalisée à TitleText à NavigationBar, voici un code simple et abrégé pour Swift 3:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

ou

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]
1
user1077784

Swift version 4.2 de la réponse d'Albert-

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]
1
Abhishek Jain

dans Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
0
Imtee

Swift up à travers Swift 3.2 (pas Swift 4.0)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black
0
bubbaspike

Dans Swift 3, cela fonctionne:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
0
srinivasan