iOS change la police et la couleur du titre de la barre de navigation


101

J'ai donc ce code qui devrait changer la police du titre de la barre de navigation, mais il le 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 de 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];

Réponses:


251

La bonne façon de changer la police (et la couleur) du titre est:

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

Modifier: Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Modifier: 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)!]

2
La taille reste la même quelle que soit la valeur que j'essaie
Raphael Royer-Rivard

1
Oui, j'ai réalisé que ma police n'était pas correctement chargée. Je ne comprends toujours pas pourquoi, j'ai importé OpenSans-Light et OpenSans-Regular de la même manière, seul OpenSans-Light semble être utilisable ...
Raphael Royer-Rivard

1
Le code Obj-C manque un crochet fermant. Il doit être: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" size: 21]}];
Dylan Hand

allez au lien pour changer la police backBarButton: stackoverflow.com/a/16538596/5967144
soorej babu

Qu'en est-il lors de l'utilisation d'un LargeTitle NavBar? Je ne trouve rien navigationBar.LargeTitleTextAttributesou quoi que ce soit à cet égard. Savez-vous comment définir la police LargeTitle globalement?
iKK

54

Il n'y a rien de mal avec les autres réponses. Je partage juste la version du storyboard pour définir la police.

1. Sélectionnez votre barre de navigation dans votre contrôleur de navigation

barre de navigation

2. Modifiez la police du titre dans l'inspecteur d'attributs

police de titre

(Vous devrez probablement basculer la teinte de la barre pour la barre de navigation avant que Xcode prenne la nouvelle police)

Remarques (mises en garde)

Vérifié que cela fonctionne sur Xcode 7.1.1+. ( Voir les exemples ci-dessous )

  1. Vous devez changer la teinte de la barre de navigation avant que la police ne prenne effet (cela semble être un bogue dans Xcode; vous pouvez la rétablir par défaut et la police restera)
  2. Si vous choisissez une police système ~ Assurez-vous que la taille n'est pas 0.0 (sinon la nouvelle police sera ignorée)

Taille

  1. On dirait que cela fonctionne sans problème lorsqu'une seule NavBar est dans la hiérarchie des vues. Il semble que les NavBars secondaires de la même pile soient ignorées. (Notez que si vous affichez la barre de navigation du contrôleur de navigation principal, tous les autres paramètres de barre de navigation personnalisés sont ignorés).

Gotchas (deux)

Certains d'entre eux sont répétés, ce qui signifie qu'ils méritent probablement d'être notés.

  1. Parfois, le XML du storyboard est corrompu. Cela vous oblige à revoir la structure dans Storyboard en mode Code Source (cliquez avec le bouton droit sur le fichier de storyboard> Ouvrir en tant que ...)
  2. Dans certains cas, la balise navigationItem associée à l'attribut d'exécution défini par l'utilisateur était définie comme un enfant xml de la balise de vue au lieu de la balise de contrôleur de vue. Si c'est le cas, retirez-le des balises pour un fonctionnement correct.
  3. Activez la teinte NavBar pour vous assurer que la police personnalisée est utilisée.
  4. Vérifiez le paramètre de taille de la police sauf si vous utilisez un style de police dynamique
  5. La hiérarchie de la vue remplacera les paramètres. Il semble qu'une police par pile soit possible.

Résultat

navbar-italique

Échantillons

Gestion des polices personnalisées

Remarque ~ Une belle liste de contrôle peut être trouvée sur le site Web Code With Chris et vous pouvez voir l'exemple de projet de téléchargement.

Si vous avez votre propre police et que vous souhaitez l'utiliser dans votre storyboard, il existe un ensemble de réponses décentes à la question SO suivante . Une réponse identifie ces étapes.

  1. Obtenez votre fichier de police personnalisé (.ttf, .ttc)
  2. Importez les fichiers de polices dans votre projet Xcode
  3. Dans l'app-info.plist, ajoutez une clé nommée Fonts fournie par l'application.C'est un type de tableau, ajoutez tous vos noms de fichiers de polices au tableau, note: y compris l'extension de fichier.
  4. Dans le storyboard, dans la barre de navigation, accédez à l'inspecteur d'attributs, cliquez sur le bouton icône droit de la zone de sélection de la police.Dans le panneau contextuel, choisissez Police à personnaliser et choisissez la famille du nom de la police incorporée.

Solution de contournement des polices personnalisées

Donc, Xcode semble naturellement pouvoir gérer les polices personnalisées sur UINavigationItem, mais cette fonctionnalité ne se met tout simplement pas à jour correctement (la police sélectionnée est ignorée).

UINavigationItem

Pour contourner cela:

Une solution consiste à résoudre le problème en utilisant le storyboard et en ajoutant une ligne de code: commencez par ajouter un UIView (UIButton, UILabel ou une autre sous-classe UIView) au contrôleur de vue (pas l'élément de navigation ... Xcode ne permet actuellement pas 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 contrôleur de vue. Attribuez simplement cette vue à UINavigationItem.titleView. Vous pouvez également définir le nom du texte dans le code si nécessaire. Bogue signalé (23600285).

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

21

Essaye ça:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

14

Mon code Swift pour changer 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, j'ai ceci dans mon AppDelegate:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

8

AJOUTEZ ce code d'une seule ligne dans votre délégué d'application - Did Finish Lauch. Cela changera la police, la couleur de la barre de navigation dans toute l'application.

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

5

Voici une réponse à votre question:

Déplacez votre code vers la méthode ci-dessous car le titre de la barre de navigation a été mis à jour après le chargement de la vue. J'ai essayé d'ajouter le code ci-dessus dans viewDidLoad ne fonctionne pas, cela fonctionne bien dans la méthode viewDidAppear.

  -(void)viewDidAppear:(BOOL)animated{}

3

Tout le monde a besoin d'une version Swift 3. redColor()est devenu juste red.

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

2

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

2

J'ai eu un problème car lorsque j'ai essayé de changer mon titre NavigationItem par programme, je n'ai pas pu trouver ma police familiale (j'ai essayé beaucoup de choses mais impossible de la faire fonctionner correctement), j'ai donc trouvé une solution de contournement très agréable et facile dans le storyboard.

  1. Tout d'abord, vous ajoutez sous l'élément de navigation une vue au milieu et n'oubliez pas de définir backGroundColor pour effacer la couleur pour avoir la même couleur que navBar:

entrez la description de l'image ici

  1. Ensuite, vous ajoutez une étiquette que vous pouvez modifier (définir la couleur du texte, la police, la taille ...) dans cette vue
  2. Vous ajoutez des contraintes à l'étiquette (haut = 0, bas = 0, fin = 0 et interligne = 0) pour afficher et centrer le texte de l'étiquette

Enfin, vous devriez avoir quelque chose comme ça dans le plan du document:

entrez la description de l'image ici

Et quelque chose comme ça dans votre ViewController:

entrez la description de l'image ici

J'espère que cela peut vous aider.


2

Rapide:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

1

Celui-ci pour alternative à Swift 4 (déjà réponse par @Josh):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

1

iOS 11

entrez la description de l'image ici

Objectif c

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
}

1

Pour Objective-C pour définir la police et la couleur

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

0

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

0

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

0

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

0

Ajouter cette extension

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

Ajoutez la ligne suivante dans viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

Travailler dans swift 3.0 Pour changer la couleur du titre, vous devez ajouter titleTextAttributes comme ceci

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white
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.