iOS ändert die Schriftart und Farbe des Titels der Navigationsleiste


101

Also habe ich diesen Code, der die Titelschrift der Navigationsleiste ändern sollte, aber er tut es nicht

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

Das Ändern der Schriftart der Zurück-Schaltfläche mit diesem Code funktioniert einwandfrei.

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];

Antworten:


251

Der richtige Weg, um die Titelschriftart (und -farbe) zu ändern, ist:

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

Edit: Swift 4.2

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

Edit: 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
Die Größe bleibt gleich, unabhängig von dem Wert, den ich versuche
Raphael Royer-Rivard

1
Ja, ich habe festgestellt, dass meine Schriftart nicht richtig geladen wurde. Ich kann immer noch nicht herausfinden warum, ich habe OpenSans-Light und OpenSans-Regular auf die gleiche Weise importiert, nur OpenSans-Light scheint verwendbar zu sein ...
Raphael Royer-Rivard

1
Dem Obj-C-Code fehlt eine schließende Klammer. Es sollte sein: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regulär" Größe: 21]};
Dylan Hand

Gehe zum Link zum Ändern der backBarButton-Schriftart: stackoverflow.com/a/16538596/5967144
soorej babu

Was ist mit einer LargeTitle NavBar? Ich finde nichts navigationBar.LargeTitleTextAttributesoder nichts in dieser Hinsicht. Wissen Sie, wie Sie die LargeTitle-Schriftart global festlegen können?
iKK

54

An den anderen Antworten ist nichts auszusetzen. Ich teile nur die Storyboard-Version zum Festlegen der Schriftart.

1. Wählen Sie Ihre Navigationsleiste in Ihrem Navigationscontroller aus

navbar

2. Ändern Sie die Titelschriftart im Attributinspektor

Überschrift

(Sie müssen wahrscheinlich die Balkentönung für die Navigationsleiste umschalten, bevor Xcode die neue Schriftart übernimmt.)

Anmerkungen (Vorsichtsmaßnahmen)

Verifiziert, dass dies unter Xcode 7.1.1+ funktioniert. ( Siehe die Beispiele unten )

  1. Sie müssen den Farbton der Navigationsleiste umschalten, bevor die Schriftart wirksam wird (scheint ein Fehler in Xcode zu sein; Sie können ihn wieder auf die Standardeinstellung zurücksetzen und die Schriftart bleibt erhalten).
  2. Wenn Sie eine Systemschriftart auswählen ~ Stellen Sie sicher, dass die Größe nicht 0,0 ist (andernfalls wird die neue Schriftart ignoriert).

Größe

  1. Dies scheint problemlos zu funktionieren, wenn sich nur eine NavBar in der Ansichtshierarchie befindet. Es scheint, dass sekundäre NavBars im selben Stapel ignoriert werden. (Beachten Sie, dass alle anderen benutzerdefinierten navBar-Einstellungen ignoriert werden, wenn Sie die navBar des Master-Navigationscontrollers anzeigen.)

Gotchas (deux)

Einige davon werden wiederholt, was bedeutet, dass sie sehr wahrscheinlich erwähnenswert sind.

  1. Manchmal wird die Storyboard-XML beschädigt. Dazu müssen Sie die Struktur im Storyboard als Quellcode-Modus überprüfen (klicken Sie mit der rechten Maustaste auf die Storyboard-Datei> Öffnen als ...).
  2. In einigen Fällen wurde das dem benutzerdefinierten Laufzeitattribut zugeordnete Navigationselement-Tag als XML-Kind des Ansichtstags anstelle des Ansichtscontrollertags festgelegt. Wenn ja, entfernen Sie es zwischen den Tags, um einen ordnungsgemäßen Betrieb zu gewährleisten.
  3. Schalten Sie den NavBar-Farbton um, um sicherzustellen, dass die benutzerdefinierte Schriftart verwendet wird.
  4. Überprüfen Sie den Größenparameter der Schriftart, es sei denn, Sie verwenden einen dynamischen Schriftstil
  5. Die Ansichtshierarchie überschreibt die Einstellungen. Es scheint, dass eine Schriftart pro Stapel möglich ist.

Ergebnis

navbar-kursiv

Proben

Umgang mit benutzerdefinierten Schriftarten

Hinweis ~ Eine schöne Checkliste finden Sie auf der Website von Code With Chris. Sie können das Beispiel-Download-Projekt sehen.

Wenn Sie eine eigene Schriftart haben und diese in Ihrem Storyboard verwenden möchten, gibt es eine Reihe anständiger Antworten auf die folgende SO-Frage . Eine Antwort identifiziert diese Schritte.

  1. Holen Sie sich eine benutzerdefinierte Schriftartdatei (.ttf, .ttc)
  2. Importieren Sie die Schriftdateien in Ihr Xcode-Projekt
  3. Fügen Sie in der app-info.plist einen Schlüssel mit dem Namen Fonts hinzu, der von der Anwendung bereitgestellt wird. Es handelt sich um einen Array-Typ. Fügen Sie dem Array alle Ihre Font-Dateinamen hinzu. Hinweis: einschließlich der Dateierweiterung.
  4. Klicken Sie im Storyboard in der Navigationsleiste zum Attributinspektor und klicken Sie auf die rechte Symbolschaltfläche des Bereichs zur Auswahl der Schriftart. Wählen Sie im Popup-Fenster die Option Schriftart an Benutzerdefiniert aus und wählen Sie den Namen der Familie Ihrer eingebetteten Schriftart aus.

Problemumgehung für benutzerdefinierte Schriftarten

Xcode sieht natürlich so aus, als ob es benutzerdefinierte Schriftarten in UINavigationItem verarbeiten kann, aber diese Funktion wird nur nicht ordnungsgemäß aktualisiert (die ausgewählte Schriftart wird ignoriert).

UINavigationItem

Um dies zu umgehen:

Eine Möglichkeit besteht darin, das Problem mithilfe des Storyboards zu beheben und eine Codezeile hinzuzufügen: Fügen Sie dem View Controller zunächst eine UIView (UIButton, UILabel oder eine andere UIView-Unterklasse) hinzu (nicht das Navigationselement ... Xcode lässt dies derzeit nicht zu Das). Nachdem Sie das Steuerelement hinzugefügt haben, können Sie die Schriftart im Storyboard ändern und Ihrem View Controller eine Referenz als Ausgangsbasis hinzufügen. Weisen Sie diese Ansicht einfach der UINavigationItem.titleView zu. Bei Bedarf können Sie den Textnamen auch im Code festlegen. Gemeldeter Fehler (23600285).

@IBOutlet var customFontTitleView: UIButton!

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

21

Versuche dies:

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

14

Mein Swift-Code zum Ändern des Titels der Navigationsleiste:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

Und wenn Sie auch die Hintergrundschrift ändern möchten, habe ich dies in meinem AppDelegate:

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

8

Fügen Sie diesen einzeiligen Code in Ihren App-Delegierten ein - Hat Lauch beendet. Die Schriftart und die Farbe der Navigationsleiste werden in der gesamten Anwendung geändert.

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

5

Hier ist eine Antwort auf Ihre Frage:

Verschieben Sie Ihren Code in die folgende Methode, da der Titel der Navigationsleiste nach dem Laden der Ansicht aktualisiert wurde. Ich habe versucht, den obigen Code in viewDidLoad hinzuzufügen. Das funktioniert nicht. In der viewDidAppear-Methode funktioniert es einwandfrei.

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

3

Jeder braucht eine Swift 3 Version. redColor()hat sich zu just geändert red.

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

2

Mit Literalen ist es etwas besser lesbar:

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

2

Ich hatte ein Problem, weil ich beim Versuch, meinen NavigationItem-Titel programmgesteuert zu ändern, meine Familienschrift nicht finden konnte (viele Dinge ausprobiert, aber unmöglich, sie korrekt auszuführen), sodass ich eine Problemumgehung im Storyboard sehr schön und einfach fand.

  1. Zuerst fügen Sie unter Navigationselement eine Ansicht in der Mitte hinzu und vergessen nicht, backGroundColor auf klare Farbe zu setzen, um dieselbe Farbe wie navBar zu erhalten:

Geben Sie hier die Bildbeschreibung ein

  1. Anschließend fügen Sie eine Beschriftung hinzu, die Sie in dieser Ansicht bearbeiten können (Textfarbe, Schriftart, Größe festlegen ...)
  2. Sie fügen der Beschriftung Einschränkungen hinzu (Oben = 0, Unten = 0, Nachlauf = 0 und Führend = 0), um den Beschriftungstext anzuzeigen und zu zentrieren

Schließlich sollten Sie so etwas in der Dokumentskizze haben:

Geben Sie hier die Bildbeschreibung ein

Und so etwas in Ihrem ViewController:

Geben Sie hier die Bildbeschreibung ein

Hoffe es kann helfen.


2

Schnell:-

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

1

Dies ist eine Alternative zu Swift 4 (bereits von @Josh beantwortet):

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

1

iOS 11

Geben Sie hier die Bildbeschreibung ein

Ziel 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

Damit Objective-C Schriftart und Farbe festlegt

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

}

0

Hier ist eine Antwort für 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

Vergessen Sie nicht, die Raw-Werte der Schlüssel hinzuzufügen, um Kompilierungsfehler zu vermeiden.

    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

Fügen Sie diese Erweiterung hinzu

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

Fügen Sie die folgende Zeile in viewDidLoad () ein

self.navigationController?.navigationBar.changeFont()

-1

Arbeiten in Swift 3.0 Um die Titelfarbe zu ändern, müssen Sie titleTextAttributes wie folgt hinzufügen

        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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.