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:
Comment puis-je rendre ce bouton blanc?
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 =
Vous devriez utiliser ceci:
navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Swift
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.tintColor = UIColor.white
}
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
}
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)
Dans Swift, régler le bouton Précédent sur red
.
self.navigationController?.navigationBar.tintColor = UIColor.red
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
self.navigationController?.navigationBar.tintColor = UIColor.redColor()
Cet extrait fait la magie. Au lieu de redColor, remplacez-le par votre souhait.
Utilisez ce code dans AppDelegate
class, à l'intérieur de didFinishLaunchingWithOptions
.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor = .white
}
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 versUIView
et présente maintenant le comportement hérité spécial décrit dansUIView.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.
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
}
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
}
}
dans Swift 2.0 utiliser
self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
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()]
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
Cela fonctionne pour moi, iOS 9.0+
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
}
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
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
Il sera résolu avec cette ligne dans - (void) viewDidLoad:
self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
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()
Vous devriez ajouter cette ligne
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black