web-dev-qa-db-fra.com

Comment changer la police et la couleur du texte du titre de UINavigationBar

Je veux changer la police du titre en Avenir, et je veux la rendre blanche. Voici mon code dans la méthode viewDidLoad:

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir", size: 20)!]
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

Ce code ne change que la couleur du titre, pas la police. De plus, j'ai essayé de l'implémenter dans le fichier de délégué d'application, mais cela n'a pas fonctionné.

Voici à quoi ressemble mon UINavigationBar: enter image description here

Je veux que le titre ait également une police d'Avenir. Comment puis-je y parvenir?

20
Rehaan Advani

J'utilise ceci:

Mise à jour, il semble que cela soit également nécessaire:

    self.navigationController?.navigationBar.barStyle       = UIBarStyle.Black // I then set the color using:

    self.navigationController?.navigationBar.barTintColor   = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0) // a lovely red

    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() // for titles, buttons, etc.

    let navigationTitleFont = UIFont(name: "Avenir", size: 20)!

    self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: navigationTitleFont]
32
Fred Faust

Si vous souhaitez que les styles soient appliqués dans toute l'application, ajoutez ces lignes dans le fichier AppDelegate.m.

NSShadow* shadow = [NSShadow new]; 
shadow.shadowOffset = CGSizeMake(0.0f, 0.0f); 
shadow.shadowColor = [UIColor blackColor]; 

[[UINavigationBar appearance] setTitleTextAttributes: @{
NSForegroundColorAttributeName: [UIColor whiteColor],
NSFontAttributeName: [UIFont fontWithName:@"Kelvetica Nobis" size:20.0f],
NSShadowAttributeName: shadow 
}];

NSForegroundColorAttributeName définit la couleur de police.

NSFontAttributeName définit une face de police personnalisée pour le texte du titre.

NSShadowAttributeName applique un effet d'ombre agréable au texte, vous pouvez supprimer cette partie si vous le souhaitez.

Également à l'avance, vous pouvez ajouter ces lignes pour masquer le texte qui apparaît dans le bouton de retour dans la barre d'action lorsque vous accédez à une autre vue dans le contrôleur de navigation.

[[UIBarButtonItem appearance]
     setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000)
     forBarMetrics:UIBarMetricsDefault];

J'espère que cela aidera votre question :)

11
Laky

Votre code est OK, il vous suffit de définir tout titleTextAttributes sur une seule ligne:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white , NSFontAttributeName: UIFont(name: "Avenir", size: 17)!]
6
Milad Faridnia

Au cas où quelqu'un en aurait besoin dans Swift 4:

let navBarAppearance = UINavigationBar.appearance()
navBarAppearance.barTintColor = .red
navBarAppearance.tintColor = .white
navBarAppearance.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor: UIColor.white,
        NSAttributedString.Key.font: UIFont(name: "Avenir", size: 20)!]
5
algrid

Je voudrais simplement créer une sortie et faire ceci:

@IBOutlet weak var navigationBar: UINavigationBar!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir", size: 30)!]
}
1
Volkodav