iOS 11

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
Tommie C.
la source

Réponses:

21

Essaye ça:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
Akki
la source
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)
Libor Zapletal
la source
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)!]
Renish Dadhaniya
la source
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{}
Praveen Hiremath
la source
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)!]
Karl Taylor
la source
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]
                                                              };
sPoz
la source
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.

O. Boujaouane
la source
2

Rapide:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]
Karthik
la source
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
Hendra Kusumah
la source
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
}
Vivek
la source
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];

}
Hardik Thakkar
la source
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
Josh
la source
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
James Rochabrun
la source
0

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]
ilkayaktas
la source
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()
Pranit
la source
-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
Vikram
la source