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

AG1
quelle

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

Albert Vila Calvo
quelle
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

AG1
quelle
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.

Alex
quelle
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]
Blume
quelle
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
Niko Klausnitzer
quelle
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

Fangming
quelle
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

VirajP
quelle
6

Aktualisiert mit Swift 4

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

In Swift5 und Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
quelle
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]
Abhishek Jain
quelle
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]
Rawand Saeed
quelle
3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}
Vladimir
quelle
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
    }
Patrick.Bellot
quelle
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]
ifredy3
quelle
1

in Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Imtee
quelle
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
bubbaspike
quelle
0

In Swift 3 funktioniert dies:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
Srinivasan
quelle
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]
Raksha.
quelle