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

179

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()]

}

entrez la description de l'image ici

AG1
la source

Réponses:

314

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 = [NSAttributedString.Key.foregroundColor : UIColor.white]

(Pour Swift 4 ou version antérieure à la NSAttributedStringKeyplace de NSAttributedString.Key)

Car titleTextAttributes, les documents disent:

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

Albert Vila Calvo
la source
7
et si nous avons plusieurs barres de navigation?
sumit le
6
tintColor ne fonctionne pas pour Xcode 7.3.1. Le texte est toujours noir.
triiiiista
1
Dans Xcode 8.2, le titleTextAttributes ne se complète pas automatiquement mais fonctionne.
okysabeni
barTintColor est-il toujours nécessaire? la suppression de cette ligne fonctionne toujours
rgkobashi
Ceci ajoute un attribut de texte. Ne change pas réellement la couleur du titre. Si vous notez la police du texte, vous pouvez comprendre la différence.
Ram Madhavan
123

J'aime la réponse d'Alex. Si vous voulez quelque chose de rapide à essayer, ViewControllerassurez-vous d'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
}

entrez la description de l'image ici

AG1
la source
Mais j'utilise iso 8.1
Saorikido
1
pourquoi viewWillAppear ()? Je fais cela dans viewDidLoad et cela fonctionne très bien.
Adam Johns
4
Parce que chaque fois que vous affichez l'UIView, vous souhaitez qu'il soit défini. Si vous définissez dans viewDidLoad (), disons dans une vue UITabBar, passez à un autre onglet où il est à nouveau défini, puis revenez, il sera écrasé car la vue d'origine n'a été chargée qu'une seule fois.
FractalDoctor
2
Mise à jour pour Swift 4 - NSForegroundColorAttributeNamedevrait maintenant êtreNSAttributedStringKey.foregroundColor
Alan Scarpa
3
Mise à jour pour Swift 4.2: NSAttributedString.Key.foregroundColorau lieu deNSForegroundColorAttributeName
Stephane Paquet
81

Pour changer la couleur universellement, ce code doit rester dans la NavigationControllerde » viewDidLoadfonction:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Pour changer par ViewControllervous devez faire référence à la NavigationControllerdu ViewControlleret écrire des lignes similaires dans cette ViewControllerde viewWillAppearfonction.

Alex
la source
Comment remplacer le NavigationController pour utiliser ces méthodes?
AG1
Vous ne remplacez pas le NavigationController, vous le modifiez simplement dans la fonction ViewDidLoad. J'ai mis à jour ma réponse ci-dessus.
Alex
1
Un développeur doit donc simplement ajouter NavigationController.swift à l'espace de travail? Si c'est le cas, c'est bien!
AG1
5
@ AG1 Ceci est incorrect, il ne suffit pas d'ajouter un nouveau fichier NavigationController.swift, vous devez connecter votre contrôleur de navigation dans le Storyboard à ce fichier dans l'Inspecteur d'identité car par défaut, il utilisera un UINavigationController générique.
kakubei
2
Vous pouvez également simplement faire tout cela dans le storyboard sans avoir besoin de créer un contrôleur de navigation personnalisé. Les propriétés de Bar Tine et Style se trouvent juste à droite sous l'inspecteur d'attributs.
Markymark
33

Swift 5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

Swift 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Fleur
la source
2
J'obtiens: Le type 'NSAttributedStringKey' (alias 'NSString') n'a pas de membre 'foregroundColor'
Ahmadreza
Veuillez utiliser le code ci-dessous pour la dernière version xcode 10 et swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam
16

Pour travailler dans objective-c, je dois mettre les lignes suivantes viewWillAppeardans 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
Niko Klausnitzer
la source
Mais quand je retourne à un autre viewcontroller, la couleur a également changé. Toute idée sur la façon d'éviter cela. Je veux que mon contrôleur de vue principal soit d'une couleur et les autres d'une autre.
user3163404
1
Je pense que vous devez également définir la couleur dans votre nouveau contrôleur de vue.
Niko Klausnitzer
13

Pour faire ce travail dans le storyboard (Interface Builder Inspector)

Avec l'aide de IBDesignable, nous pouvons ajouter plus d'options à l'Interface Builder Inspector UINavigationControlleret les modifier 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 pour UINavigationController sur le storyboard.

entrez la description de l'image ici

Fangming
la source
7

Si vous souhaitez définir la couleur de teinte et la couleur de la barre pour l'ensemble de l'application, le code suivant peut être ajouté à 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
`

Barre de navigationTintColor et tintColor sont définis

VirajP
la source
6

Mis à jour avec Swift 4

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

Dans Swift5 et Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
la source
Bien que cet extrait de code puisse résoudre la question, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
31piy du
4

Version Swift 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]
Abhishek Jain
la source
J'ai vraiment aimé la façon dont vous avez ajouté cette réponse. .barTintColor n'est pas une option maintenant. Voulez-vous dire .backgroundColor?
Ben
4

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]
Rawand Saeed
la source
3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

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

Swift 4.1

Ajouter une fonction à viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Dans la setup()fonction, 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
    }
Patrick.Bellot
la source
1

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

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

ou

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]
ifredy3
la source
1

dans Swift 4.2

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

Swift jusqu'à 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
bubbaspike
la source
1

Swift 5.1

Copiez et collez uniquement ViewDidLoad()et modifiez sa taille et sa taille selon vos besoins. Avant de copier et coller, ajoutez la barre de navigation en haut de l'écran.

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

Si cela ne fonctionne pas, vous pouvez essayer de changer uniquement la couleur du texte

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Raksha.
la source
0

Dans Swift 3, cela fonctionne:

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