Donc, j'ai ce code qui devrait changer la police du titre de la barre de navigation, mais il fait
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
[UIColor whiteColor], NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
Changer la police du bouton retour avec ce code fonctionne très bien.
//set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
forState:UIControlStateNormal];
La bonne façon de changer la police du titre (et sa couleur) est la suivante:
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];
Édition: Swift 4.2
self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]
Édition: Swift 4
self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]
Swift 3:
self.navigationController?.navigationBar.titleTextAttributes =
[NSForegroundColorAttributeName: UIColor.redColor(),
NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]
Il n'y a rien de mal avec les autres réponses. Je partage juste la version du storyboard pour définir la police.
(vous devrez probablement basculer la teinte des barres pour la barre de navigation avant que Xcode ne récupère la nouvelle police)
Vérifié que cela fonctionne sur Xcode 7.1.1+. ( Voir les exemples ci-dessous )
Certaines d'entre elles sont répétées, ce qui signifie qu'elles méritent d'être signalées.
Remarque ~ A Belle liste de contrôle peut être trouvé sur le site Web Code With Chris et vous pouvez voir un exemple de projet de téléchargement.
Si vous avez votre propre police et que vous voulez l'utiliser dans votre story-board, il existe un ensemble décent de réponses sur ce qui suit SO Question . Une réponse identifie ces étapes.
Donc, Xcode semble naturellement pouvoir gérer les polices personnalisées sur UINavigationItem, mais cette fonctionnalité ne se met pas à jour correctement (la police sélectionnée est ignorée).
Pour contourner ce problème:
Une solution consiste à résoudre le problème en utilisant le storyboard et en ajoutant une ligne de code: Tout d'abord, ajoutez un UIView (UIButton, UILabel ou une autre sous-classe UIView) au contrôleur de vue (pas à l'élément de navigation ... Xcode ne permet pas actuellement de le faire. cette). Après avoir ajouté le contrôle, vous pouvez modifier la police dans le storyboard et ajouter une référence en tant que sortie à votre View Controller. Attribuez simplement cette vue à UINavigationItem.titleView. Vous pouvez également définir le nom du texte dans le code si nécessaire. Bug signalé (23600285).
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
Essaye ça:
NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor],NSForegroundColorAttributeName,
[UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
Mon code Swift pour modifier le titre de la barre de navigation:
let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes
Et si vous souhaitez également modifier la police d'arrière-plan, voici ce que j'ai dans mon AppDelegate:
let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)
Voici une réponse à votre question:
Déplacez votre code vers la méthode ci-dessous car le titre de la barre de navigation est mis à jour après l'affichage chargé. J'ai essayé d'ajouter du code ci-dessus dans viewDidLoad ne fonctionne pas, cela fonctionne très bien dans la méthode viewDidAppear.
-(void)viewDidAppear:(BOOL)animated{}
Tout le monde a besoin d'une version Swift 3. redColor()
n'est plus que red
.
self.navigationController?.navigationBar.titleTextAttributes =
[NSForegroundColorAttributeName: UIColor.red,
NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]
Rapide:-
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]
J'ai eu un problème parce que lorsque j'ai essayé de changer mon titre NavigationItem par programmation, je n'ai pas pu trouver la police de ma famille (j'ai essayé beaucoup de choses, mais impossible de le faire fonctionner correctement). J'ai donc trouvé une solution de contournement très agréable et facile dans le storyboard.
Enfin, vous devriez avoir quelque chose comme ça dans le plan du document:
Et quelque chose comme ça dans votre ViewController:
J'espère que ça peut aider.
C'est un peu plus lisible en utilisant des littéraux:
self.navigationController.navigationBar.titleTextAttributes = @{
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
NSForegroundColorAttributeName: [UIColor whiteColor]
};
AJOUTEZ ce code de ligne unique dans votre délégué d’application - Lancement de Didfinish. Il changera la police, la couleur de la barre de navigation de l’application.
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]
if (@available(iOS 11.0, *)) {
self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
self.navigationController.navigationBar.prefersLargeTitles = true;
// Change Color
self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
} else {
// Fallback on earlier versions
}
Pour que Objective-C définisse la police et la couleur
- (void)_setup {
NSDictionary *barButtonTitleAttributes = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
};
[self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];
}
Celui-ci comme alternative à Swift 4 (répondez déjà par @Josh):
let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed
N'oubliez pas d'ajouter les valeurs brutes des clés pour éviter les erreurs de compilation.
let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
navigationController?.navigationBar.titleTextAttributes = textAttributes
Voici une réponse pour Swift 4 ????:
let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
navigationController?.navigationBar.titleTextAttributes = textAttributes
Swift 4.2
self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.white,
NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]
Ajouter cette extension
extension UINavigationBar {
func changeFont() {
self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
}
}
Ajouter la ligne suivante dans viewDidLoad ()
self.navigationController?.navigationBar.changeFont()