Navigationsleiste Leiste, Farbton und Titeltextfarbe in iOS 8


177

Der Hintergrundtext in der Statusleiste ist immer noch schwarz. Wie ändere ich die Farbe in Weiß?

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

Geben Sie hier die Bildbeschreibung ein

Antworten:


311

In AppDelegate.swift, in habe application(_:didFinishLaunchingWithOptions:)ich folgendes eingefügt:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]

(Für Swift 4 oder früher NSAttributedStringKeyanstelle von NSAttributedString.Key)

Denn titleTextAttributesdie Dokumente sagen:

Sie können die Schriftart, die Textfarbe, die Textschattenfarbe und den Textschattenversatz für den Titel im Textattributwörterbuch angeben


6
Was ist, wenn wir mehrere Navigationsleisten haben?
Summe

6
tintColor funktioniert nicht für Xcode 7.3.1. Der Text ist noch schwarz.
Triiiiista

1
In Xcode 8.2 wird titleTextAttributes nicht automatisch vervollständigt, funktioniert jedoch.
Okysabeni

ist barTintColor noch notwendig? Das Löschen dieser Zeile funktioniert immer noch
rgkobashi

122

Ich mag Alex 'Antwort. Wenn Sie etwas schnell ausprobieren möchten, ViewControllerstellen Sie sicher, dass Sie es verwenden

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // swift 4.2
}

Geben Sie hier die Bildbeschreibung ein


Aber ich benutze
ISO

1
Warum viewWillAppear ()? Ich mache das in viewDidLoad und es funktioniert gut.
Adam Johns

4
Denn jedes Mal, wenn Sie die UIView anzeigen, möchten Sie, dass sie festgelegt wird. Wenn Sie in viewDidLoad () beispielsweise in einer UITabBar-Ansicht festlegen, wechseln Sie zu einer anderen Registerkarte, auf der sie erneut festgelegt ist, und kehren Sie zurück. Sie wird überschrieben, da die ursprüngliche Ansicht nur einmal geladen wurde.
FractalDoctor

2
Update für Swift 4 - NSForegroundColorAttributeNamesollte jetzt seinNSAttributedStringKey.foregroundColor
Alan Scarpa

3
Update für Swift 4.2: NSAttributedString.Key.foregroundColorstattNSForegroundColorAttributeName
Stephane Paquet

81

Um die Farbe zu ändern , dieser Code universell, sollte in dem sitzt NavigationController‚s viewDidLoadFunktion:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

Um es zu ändern pro ViewControllerSie die Referenz müßten NavigationControllervon der ViewControllerund Schreiben ähnliche Linien in dieser ViewController‚s - viewWillAppearFunktion.


Wie überschreibe ich den NavigationController, um diese Methoden zu verwenden?
AG1

Sie überschreiben den NavigationController nicht, sondern ändern ihn nur in der ViewDidLoad-Funktion. Ich habe meine Antwort oben aktualisiert.
Alex

1
Ein Entwickler muss also nur NavigationController.swift zum Arbeitsbereich hinzufügen? Wenn ja, ist das ordentlich!
AG1

5
@ AG1 Dies ist falsch. Das Hinzufügen einer neuen Datei NavigationController.swift reicht nicht aus. Sie müssen Ihren Navigationscontroller im Storyboard mit dieser Datei im Identitätsinspektor verbinden, da standardmäßig ein generischer UINavigationController verwendet wird.
Kakubei

2
Sie können dies auch einfach im Storyboard tun, ohne einen benutzerdefinierten Navigationscontroller erstellen zu müssen. Die Eigenschaften für Takt und Stil befinden sich rechts unter dem Attributinspektor.
Markymark

31

Swift 5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

Swift 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

2
Ich bekomme: Typ 'NSAttributedStringKey' (auch bekannt als 'NSString') hat kein Mitglied 'foregroundColor'
Alfi

Bitte verwenden Sie den folgenden Code für die neueste Version xcode 10 und swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam

16

Um in Objective-C zu arbeiten, muss ich die folgenden Zeilen viewWillAppearin meinen CustomViewController einfügen.

[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTranslucent:NO];

Für Swift2.x funktioniert dies:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor()

Für Swift3.x funktioniert dies:

self.navigationController?.navigationBar.barTintColor = UIColor.red

Aber wenn ich zu einem anderen Viewcontroller zurückkehre, hat sich auch die Farbe geändert. Irgendeine Idee, wie dies verhindert werden kann. Ich möchte, dass mein Haupt-Viewcontroller eine Farbe und die andere eine andere Farbe hat.
user3163404

1
Ich denke, Sie müssen auch die Farbe in Ihrem neuen Ansichts-Controller einstellen.
Niko Klausnitzer

13

Um diesen Job im Storyboard zu erledigen (Interface Builder Inspector)

Mithilfe von IBDesignablekönnen wir dem Interface Builder Inspector weitere Optionen hinzufügen UINavigationControllerund diese im Storyboard optimieren. Fügen Sie Ihrem Projekt zunächst den folgenden Code hinzu.

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            navigationBar.barTintColor = newValue
        }
        get {
            guard  let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

Legen Sie dann einfach die Attribute für UINavigationController im Storyboard fest.

Geben Sie hier die Bildbeschreibung ein


7

Wenn Sie die Farbton- und Balkenfarbe für die gesamte App festlegen möchten, kann der folgende Code zu AppDelegate.swift in hinzugefügt werden

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

NavigationsleisteTintColor und tintColor sind eingestellt


6

Aktualisiert mit Swift 4

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}

6

In Swift5 und Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes

Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
31.

4

Schnelle 4.2-Version von Alberts Antwort-

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]

Mir hat sehr gut gefallen, wie Sie diese Antwort hinzugefügt haben. .barTintColor ist derzeit keine Option. Meinst du .backgroundColor?
Ben

4

Festlegen der Textfarbe des Titels der Navigationsleiste in Weiß in Swift Version 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}

3

Swift 4.1

Fügen Sie viewDidLoad eine Funktion hinzu

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

In der setup()Funktion hinzufügen:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }

1

Für benutzerdefinierte Farbe TitleTextan NavigationBar, hier eine kurze und einfache Code für Swift 3:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

oder

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]

1

in Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

1

Swift up durch Swift 3.2 (nicht Swift 4.0)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black

0

In Swift 3 funktioniert dies:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]

0

Swift 5.1

Kopieren und Einfügen ViewDidLoad()und Ändern der Größe und Größe nach Bedarf. Fügen Sie vor dem Kopieren und Einfügen die Navigationsleiste oben auf dem Bildschirm hinzu.

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

Wenn es nicht funktioniert, können Sie versuchen, nur die Textfarbe zu ändern

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: 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.