web-dev-qa-db-fra.com

Changer la couleur du bouton Précédent dans la barre de navigation

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:

enter image description here

Comment puis-je rendre ce bouton blanc?

163
Brandon Evans

Vous pouvez modifier la couleur de teinte globale dans votre scénario en cliquant sur un espace vide du tableau et en sélectionnant dans la barre d'outils de droite "Afficher l'inspecteur de fichier". Vous verrez alors l'option "Teinte globale" dans le bas de la barre d'outils.

Global Tint option in storyboard

239
Etgar

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 similaire ont été simplifiés à UIColor.white

En outre, de nombreuses options optionnelles auparavant implicites ont été changées en explicite. Vous aurez donc peut-être besoin de:

self.navigationController?.navigationBar =
176
Chamath Jeevan

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

enter image description here

enter image description here

86
AlessandroDP

Vous devriez utiliser ceci:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
46
Tiep Vu Van

Swift

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }
22
Deepak Tagadiya

Vous pouvez utiliser comme celui-ci. Placez-le à l'intérieur de 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
    }
18
Mohammad Nurdin

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)
14
AiOsN

Dans Swift, régler le bouton Précédent sur red.

self.navigationController?.navigationBar.tintColor = UIColor.red
14
Vincent

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
13
Darrell Richards

Swift 3

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

enter image description here

Le code correct pour changer de couleur est:

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

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

6
Elon R.
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Cet extrait fait la magie. Au lieu de redColor, remplacez-le par votre souhait.

6
Suresh Kumar Durairaj

Utilisez ce code dans AppDelegate class, à l'intérieur de didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}
6
M.Nadeeshan

Toutes les réponses définissant UINavigationBar.appearance().tintColor sont en conflit avec la documentation Apple dans UIAppearance.h.

Remarque pour iOS7: sur iOS7, la propriété tintColor a été déplacée vers UIView et présente maintenant le comportement hérité spécial décrit dans UIView.h. Ce comportement hérité peut entrer en conflit avec le proxy d'apparence. Par conséquent, tintColor n'est plus autorisé avec le proxy d'apparence.

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

La manière correcte de colorer la barre de navigation en violet, ainsi que le titre et les boutons en blanc dans l'application via le proxy d'apparence est la suivante:

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

Notez que UIBarButtonItem n'est pas une sous-classe de UIView, mais plutôt NSObject. Donc, sa propriété tintColor n'est pas l'héritage tintColor de UIView.

Malheureusement, UIBarButtonItem.tintColor n'est pas annoté avec UI_APPEARANCE_SELECTOR - mais cela me semble un bogue dans la documentation. La réponse de Apple Engineering in ce radar indique qu'elle est prise en charge.

5
Jamie McDaniel

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
}
4
Mannam Brahmam

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 du contrôleur de vue "Informations de paiement", vous pouvez le faire dans la fenêtre "Paramètres", comme cela se prépare :

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

dans Swift 2.0 utiliser

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

Ajouter le code suivant à didFinishLaunchingWithOptions fonction dans 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()]
3
Jayprakash Dubey
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Cela fonctionne pour moi, iOS 9.0+

2
yuchen

Pour Swift 2.0, Pour changer la couleur couleur de la teinte de la barre de navigation, texte du titre et bouton de retour la couleur de la teinte a été modifiée à 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
yazh

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 dans viewWillAppear et tout a fonctionné.

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

Basculer sur la classe elle-même en utilisant appearance() revient à effectuer un changement global sur toutes les instances de cette vue dans votre application. Pour plus voir ici

1
Honey

Je préfère NavigationController personnalisé que de définir l'interface utilisateur globale ou de placer 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 comme UIBarButtonItem.appearance().tintColor = .white

1
tylerlantern

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

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
0
Ertaky

Vous avez un choix: cacher votre bouton de retour et le faire avec votre auto. 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()
0

Vous devriez ajouter cette ligne

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