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?

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


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 =

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


56

Vous devriez utiliser ceci:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

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
 }

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
    }

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)

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

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

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


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.


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.


6

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

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

UINavigationBar.appearance().tintColor = .white

}

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
}

Merci beaucoup, monsieur
Arpit B Parekh

4

en utilisation Swift 2.0

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

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

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Cela fonctionne pour moi, iOS 9.0+


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

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
}

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


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

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;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro

0

Vous devriez ajouter cette ligne

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.