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.