Changer la couleur du bouton Retour dans la barre de navigation

194

J'essaie de changer la couleur du bouton Paramètres en blanc, mais je ne peux pas le faire changer.

J'ai essayé les deux:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

mais pas de changement, ça ressemble toujours à ça:

entrez la description de l'image ici

Comment rendre ce bouton blanc?

Brandon Evans
la source

Réponses:

284

Vous pouvez changer la couleur de teinte globale dans votre storyboard en cliquant sur un espace vide du plateau et en sélectionnant dans la barre d'outils de droite "Afficher l'inspecteur de fichiers", et vous verrez en bas de la barre d'outils l'option "Teinte globale".

Option Global Tint dans le storyboard

Etgar
la source
7
woah .. Belle trouvaille !. savez-vous comment faire cela par programme?
Paul Lehn
10
Excellente trouvaille, mais changer la teinte globale en blanc (selon la question d'origine) changera également des éléments tels que les indicateurs de divulgation des détails de la vue du tableau en blanc, ce qui les rendrait invisibles dans le tableau en question.
Mike Fischer
1
En plus des problèmes de Mike: ce contrôle rend également tous vos boutons de texte de cette couleur et vous devrez donc soit les définir à une couleur à la main (c'est-à-dire pas de couleurs par défaut évidemment) ou simplement utiliser une méthode différente.
Sirens
4
Bien que ce soit une solution rapide et facile, cela entraîne d'autres problèmes si la couleur est blanche / correspond à l'arrière-plan. Si vous avez des champs de texte, cela rend le curseur imperceptible, ce qui donne l'impression à l'utilisateur qu'il ne peut pas écrire sur un champ de texte car le curseur n'est pas visible.
Jose Ramirez
5
@PaulLehn Pour faire cela par programme, dans AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)vous pouvez écrire:self.window!.tintColor = .yourColor
mmika1000
206

Ce code change la couleur de la flèche

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Si cela ne fonctionne pas, utilisez le code ci-dessous:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notes

UIColor.whiteColor() et similaires ont été simplifiés pour UIColor.white

De plus, de nombreuses options précédemment implicites ont été changées en explicites, vous pourriez donc avoir besoin de:

self.navigationController?.navigationBar =
Chamath Jeevan
la source
7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()travaillé pour moi (Swift 2.2)
Mike Fischer
self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () a fonctionné pour moi (Swift 3)
Ajay.km
Pouvez-vous expliquer pourquoi utiliser UIBarStyle.Black?
mmika1000
Veuillez mettre à jour: self.navigationController? .NavigationBar.tintColor =
mohonish
1
il ne change que la flèche, le texte du dos reste toujours le même dans Xcode 11
jeff ayan
93

Très facile à mettre en place dans le storyboard:

entrez la description de l'image ici

entrez la description de l'image ici

AlessandroDP
la source
Parfait, merci :)
Naresh Reddy M
56

Vous devriez utiliser ceci:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Tiep Vu Van
la source
Cela a rendu le bouton blanc, mais a rendu la couleur de fond beaucoup plus claire. Savez-vous comment redonner toute sa couleur au fond du bar?
Brandon Evans
C'est la bonne réponse. Cela rendra la barre violette, en définissant la barreTintColor et les boutons de titre / barre blancs.
zirinisp
36

Rapide

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }
Deepak Tagadiya
la source
1
Utiliser dans swift 3.
Deepak Tagadiya
dites-moi également quelle version rapide vous pouvez utiliser?
Deepak Tagadiya
Et quelle classe / fichier / vc a écrit ce code dans le projet?
Deepak Tagadiya
Au début de la fonction setCloseButton () qui est appelée sur viewWillAppear.
Jayprakash Dubey
écrire dans le fichier NextViewController.swift, aussi écrire dans viewDidLoad ().
Deepak Tagadiya
20

Vous pouvez utiliser comme celui-ci. Placez-le à l'intérieur AppDelegate.swift.

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

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }
Mohammad Nurdin
la source
20

Swift 4.2

Changer le thème complet de l'application

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Changer de contrôleur spécifique

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)
AiOsN
la source
il change la couleur de toute l'application. Que faire si je dois le changer pour un écran particulier / particulier UINavigationController?
Vyachaslav Gerchicov
@VyachaslavGerchicov La réponse ci-dessus concerne le thème d'application complet, si vous souhaitez modifier un contrôleur spécifique. Faites quelque chose comme ceci: laissez navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN
Si vous êtes sur iOS 13, vous n'utilisez plus didFinishLaunchingWithOptions, il a été déplacé vers SceneDelegate.
JBarros35
15

Dans Swift3 , pour définir le bouton Retour sur red.

self.navigationController?.navigationBar.tintColor = UIColor.red
Vincent
la source
cela définira la barre de navigation, pas l'élément du bouton de la barre
carlodonz
1
Oui, c'était la question.
Vincent
"Changer la couleur du bouton Retour dans la barre de navigation"
carlodonz
C'était la seule méthode qui fonctionnait pour moi. Quelque chose semble cassé avec la mise en œuvre d'Apple en ce moment ...
Dave Y
13

Dans Swift 4, vous pouvez résoudre ce problème en utilisant:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black
Darrell Richards
la source
8

Swift 3

La réponse la plus positive n'est pas correcte pour Swift 3.

entrez la description de l'image ici

Le code correct pour changer de couleur est:

self.navigationController?.navigationBar.tintColor = UIColor.white

Si vous souhaitez changer de couleur, changez UIColor.white ci-dessus pour la couleur souhaitée

Elon R.
la source
C'était la seule méthode qui fonctionnait pour moi. Quelque chose semble cassé avec la mise en œuvre d'Apple en ce moment ...
Dave Y
7

Tous les paramètres de réponse sont en UINavigationBar.appearance().tintColorconflit avec la documentation d'Apple dans UIAppearance.h.

Remarque pour iOS7: sur iOS7, la tintColorpropriété a été déplacée vers UIViewet a maintenant un comportement hérité spécial décrit dans UIView.h. Ce comportement hérité peut entrer en conflit avec le proxy d'apparence et tintColorest donc désormais interdit avec le proxy d'apparence.

Dans Xcode, vous devez cliquer sur chaque propriété que vous souhaitez utiliser avec le proxy d'apparence pour inspecter le fichier d'en-tête et vous assurer que la propriété est annotée avec UI_APPEARANCE_SELECTOR.

Ainsi, la bonne façon de colorer la barre de navigation en violet et le titre et les boutons blancs dans toute l'application via le proxy d'apparence est:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

Notez que ce UIBarButtonItemn'est pas une sous-classe de UIViewmais plutôt NSObject. Donc , sa tintColorpropriété est pas hérité tintColorde UIView.

Malheureusement, UIBarButtonItem.tintColorn'est pas annoté avec UI_APPEARANCE_SELECTOR- mais cela me semble un bogue de documentation. La réponse d'Apple Engineering dans ce radar indique qu'il est pris en charge.

Jamie McDaniel
la source
UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // aussi
Guilherme
6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Cet extrait fait la magie. Au lieu de redColor, changez-le comme vous le souhaitez.

Suresh Kumar Durairaj
la source
6

Utilisez ce code en AppDelegateclasse, à l'intérieur de didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}
M. Nadeeshan
la source
4

Essayons ce code:

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

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}
Mannam Brahmam
la source
Merci beaucoup, monsieur
Arpit B Parekh
4

en utilisation Swift 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Riccardo Caroli
la source
4

Si vous avez déjà le bouton de retour dans votre contrôleur de vue "Paramètres" et que vous souhaitez changer la couleur du bouton de retour sur le contrôleur de vue "Informations de paiement" en autre chose, vous pouvez le faire dans le contrôleur de vue "Paramètres" pour préparer la suite comme ceci :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}
Despotovic
la source
3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Cela fonctionne pour moi, iOS 9.0+

yuchen
la source
2

Ajouter le code suivant à didFinishLaunchingWithOptions fonction AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]
Jayprakash Dubey
la source
Ce code me donne l'erreur suivante: "Utilisation de l'identifiant non résolu 'uicolorFromHex'" Quelqu'un peut-il m'aider à résoudre ce problème?
jonathan3087
probablement une extension pour UIColor. Vous pouvez rechercher stackoverflow comment créer une extension.
KvdLingen
2

Pour Swift 2.0, pour changer la couleur de teinte de la barre de navigation , le texte du titre et la couleur de teinte du bouton retour ont été modifiés à l'aide de ce qui suit dans AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}
yazh
la source
2

Je ne sais pas pourquoi personne n'a mentionné cela ... mais je faisais exactement ce que vous faisiez dans mon viewDidLoad... et cela ne fonctionnait pas. Ensuite, j'ai placé mon code viewWillAppearet tout a fonctionné.

La solution ci-dessus consiste à modifier un seul barbuttonItem. Si vous souhaitez modifier la couleur de chaque barre de navigation dans votre code, suivez cette réponse .

Fondamentalement, changer la classe elle-même en utilisant appearance()est comme faire un changement global sur toutes les instances de cette vue dans votre application. Pour en savoir plus, cliquez ici

Mon chéri
la source
1

Vous avez le choix de cacher votre bouton de retour et de le faire avec vous-même. Puis définissez sa couleur.

Je l'ai fait:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()
Muhammad Ahmed Baig
la source
1
La question portait spécifiquement sur le style de l'élément de navigation de gauche, ce qui est le plus proche de répondre directement à la question.
artisanat le
0

Il sera résolu avec cette ligne dans - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
Ertaky
la source
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro
0

Vous devriez ajouter cette ligne

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black
Monir Khlaf
la source
0

Je préfère le NavigationController personnalisé plutôt que de définir une interface utilisateur globale ou de le placer dans ViewController.

Voici ma solution


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

De plus, vous n'avez pas besoin de jouer avec Apple Api comme EKEventEditViewController , PickerViewController et ainsi de suite si vous utilisez les paramètres globaux ui commeUIBarButtonItem.appearance().tintColor = .white

tylerlantern
la source
0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
Vaibhav Gaikwad
la source