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

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


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


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.


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]

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

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


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


6

Zaktualizowano z szybką 4

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

6

W Swift5 i Xcode 10

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

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]

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]

3

Szybki 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

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
    }

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]

1

w Swift 4.2

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

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

0

W Swift 3 to działa:

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

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]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.