Pasek nawigacji, odcień i kolor tekstu tytułu w systemie iOS 8

177

Tekst tła na pasku stanu jest nadal czarny. Jak zmienić kolor na biały?

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

}

wprowadź opis obrazu tutaj

OS1
źródło

Odpowiedzi:

312

W AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)umieściłem co następuje:

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]

(W przypadku Swift 4 lub wcześniejszych użyj NSAttributedStringKeyzamiast NSAttributedString.Key)

Dla titleTextAttributes, że docs powiedzieć:

W słowniku atrybutów tekstu można określić czcionkę, kolor tekstu, kolor cienia tekstu i przesunięcie cienia tekstu dla tytułu

Albert Vila Calvo
źródło
6
co jeśli mamy wiele pasków nawigacji?
sumit
6
tintColor nie działa dla Xcode 7.3.1. Tekst jest nadal czarny.
triiiiista
1
W Xcode 8.2 atrybut titleTextAttributes nie jest automatycznie uzupełniany, ale działa.
okysabeni,
czy barTintColor jest nadal potrzebny? usunięcie tej linii nadal działa
rgkobashi
122

Podoba mi się odpowiedź Alexa. Jeśli chcesz coś szybko wypróbować, ViewControllerupewnij się, że używasz

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
}

wprowadź opis obrazu tutaj

OS1
źródło
Ale używam iso 8.1
Saorikido
1
dlaczego viewWillAppear ()? Robię to w viewDidLoad i działa dobrze.
Adam Johns
4
Ponieważ za każdym razem, gdy oglądasz UIView, chcesz, aby był ustawiony. Jeśli ustawisz w viewDidLoad () powiedz w widoku UITabBar, przejdź do innej karty, w której jest ponownie ustawiony, a następnie wróć, zostanie nadpisany, ponieważ oryginalny widok został załadowany tylko raz.
FractalDoctor
2
Aktualizacja dla Swift 4 - NSForegroundColorAttributeNameteraz powinna byćNSAttributedStringKey.foregroundColor
Alan Scarpa
3
Aktualizacja dla Swift 4.2: NSAttributedString.Key.foregroundColorzamiastNSForegroundColorAttributeName
Stephane Paquet
81

Aby zmienić kolor uniwersalnie, kod ten powinien siedzieć w NavigationController„s viewDidLoadfunkcji:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Aby to zmienić za ViewControllertrzeba odwoływać się NavigationControllerod ViewControlleri pisać podobne linie w tym ViewController„s viewWillAppearfunkcji.

Alex
źródło
Jak zastąpić NavigationController, aby użyć tych metod?
AG1
Nie zastępujesz NavigationController, po prostu modyfikujesz go w funkcji ViewDidLoad. Zaktualizowałem powyższą odpowiedź.
Alex
1
Czyli programista musi po prostu dodać NavigationController.swift do obszaru roboczego? Jeśli tak, to fajnie!
AG1,
5
@ AG1 To jest niepoprawne, samo dodanie nowego pliku NavigationController.swift nie wystarczy, musisz podłączyć kontroler nawigacji w scenorysie do tego pliku w Inspektorze tożsamości, ponieważ domyślnie użyje on Generic UINavigationController.
kakubei
2
Możesz również zrobić to wszystko w scenorysie bez konieczności tworzenia niestandardowego kontrolera nawigacji. Właściwości Bar Tine i Style znajdują się po prawej stronie pod Inspektorem atrybutów.
Markymark
31

Szybki 5

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

Szybki 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Kwiat
źródło
2
Otrzymuję: Wpisz „NSAttributedStringKey” (aka „NSString”) nie ma elementu członkowskiego „foregroundColor”
Alfi
Użyj poniższego kodu dla najnowszej wersji xcode 10 i swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam
16

Aby pracować w Objective-c, muszę umieścić następujące wiersze viewWillAppearw moim CustomViewController.

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

W przypadku Swift2.x działa to:

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

W przypadku Swift3.x to działa:

self.navigationController?.navigationBar.barTintColor = UIColor.red
Niko Klausnitzer
źródło
Ale kiedy wracam do innego kontrolera widoku, kolor też się zmienił. Każdy pomysł, jak temu zapobiec. Chcę, aby mój główny kontroler widoku miał jeden kolor, a inne inny.
user3163404
1
Myślę, że musisz również ustawić kolor w swoim nowym kontrolerze widoku.
Niko Klausnitzer
13

Aby wykonać tę pracę w scenorysie (Interface Builder Inspector)

Z pomocą IBDesignablemożemy dodać więcej opcji do Interface Builder Inspector UINavigationControlleri dostosować je do scenorysu. Najpierw dodaj następujący kod do projektu.

@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
        }
    }
}

Następnie po prostu ustaw atrybuty dla UINavigationController w scenorysie.

wprowadź opis obrazu tutaj

Fangming
źródło
7

Jeśli chcesz ustawić kolor odcienia i kolor paska dla całej aplikacji, następujący kod można dodać do AppDelegate.swift w

 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
`

Pasek nawigacji Ustawiono TintColor i tintColor

VirajP
źródło
6

Zaktualizowano z szybką 4

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}
Raj Joshi
źródło
6

W Swift5 i Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
źródło
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
31
4

Swift 4.2 wersja odpowiedzi Alberta

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
źródło
Naprawdę podobał mi się sposób, w jaki dodałeś tę odpowiedź. .barTintColor nie jest teraz opcją. Masz na myśli .backgroundColor?
Ben
4

Ustawienie koloru tekstu tytułu paska nawigacji na biały w Swift w wersji 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Rawand Saeed
źródło
3

Szybki 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}
Vladimir
źródło
3

Swift 4.1

Dodaj func do viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

W setup()funkcji dodaj:

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
źródło
1

Aby uzyskać niestandardowy kolor do TitleTextat NavigationBar, oto prosty i krótki kod dla Swift 3:

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

lub

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]
ifredy3
źródło
1

w Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Imtee
źródło
1

Swift w górę poprzez Swift 3.2 (nie 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
źródło
0

W Swift 3 to działa:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
srinivasan
źródło
0

Swift 5.1

Kopiuj i wklejaj tylko ViewDidLoad()i zmieniaj jego i rozmiar zgodnie z potrzebami. Przed kopiowaniem i wklejaniem dodaj pasek nawigacji u góry ekranu.

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

Jeśli to nie zadziała, możesz spróbować zmienić tylko kolor tekstu

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Raksha.
źródło