Barra di navigazione, tinta e colore del testo del titolo in iOS 8


177

Il testo di sfondo nella barra di stato è ancora nero. Come cambio il colore in bianco?

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

}

inserisci qui la descrizione dell'immagine

Risposte:


312

In AppDelegate.swift, in application(_:didFinishLaunchingWithOptions:)ho inserito quanto segue:

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]

(Per Swift 4 o precedente utilizzare NSAttributedStringKeyinvece di NSAttributedString.Key)

Per titleTextAttributes, i documenti dicono:

È possibile specificare il carattere, il colore del testo, il colore dell'ombra del testo e l'offset dell'ombra del testo per il titolo nel dizionario degli attributi del testo


6
cosa succede se abbiamo barre di navigazione multiple?
— Accusa il

6
tintColor non funziona con Xcode 7.3.1. Il testo è ancora nero.
— triiiiista,

1
In Xcode 8.2, titleTextAttributes non si completa automaticamente ma funziona.
— Okysabeni,

barTintColor è ancora necessario? l'eliminazione di quella riga funziona ancora
— rgkobashi,

122

Mi piace la risposta di Alex. Se vuoi qualcosa di veloce da provare, ViewControllerassicurati di usarlo

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
}

inserisci qui la descrizione dell'immagine


Ma sto usando iso 8.1
— Saorikido,

1
perché viewWillAppear ()? Lo sto facendo in viewDidLoad e funziona benissimo.
— Adam Johns,

4
Perché ogni volta che visualizzi l'UIView ti piacerebbe che fosse impostato. Se hai impostato viewDidLoad (), in una vista UITabBar, passa a un'altra scheda in cui è nuovamente impostato, quindi torna verrà sovrascritto poiché la vista originale è stata caricata una sola volta.
— FractalDoctor,

2
Aggiornamento per swift 4 - NSForegroundColorAttributeNameora dovrebbe essereNSAttributedStringKey.foregroundColor
— Alan Scarpa

3
Aggiornamento per Swift 4.2: NSAttributedString.Key.foregroundColorinvece diNSForegroundColorAttributeName
— Stephane Paquet

81

Per cambiare il colore universalmente, questo codice dovrebbe sedersi al NavigationController's viewDidLoadfunzione di:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Per cambiarlo per ViewControllersi dovrebbe fare riferimento al NavigationControllerdal ViewControllere scrivere linee simili in quella ViewController's viewWillAppearla funzione.


Come posso ignorare NavigationController per utilizzare questi metodi?
— AG1

Non si ignora il NavigationController, lo si modifica semplicemente nella funzione ViewDidLoad. Ho aggiornato la mia risposta sopra.
— Alex,

1
Quindi uno sviluppatore deve solo aggiungere NavigationController.swift all'area di lavoro? Se è così, è pulito!
— AG1,

5
@ AG1 Questo non è corretto, l'aggiunta di un nuovo file NavigationController.swift non è sufficiente, è necessario collegare il controller di navigazione nello Storyboard a questo file in Identity Inspector poiché, per impostazione predefinita, utilizzerà un UINavigationController generico.
— Kakubei,

2
Puoi anche fare tutto questo nello storyboard senza bisogno di creare un controller di navigazione personalizzato. Le proprietà di Bar Tine e Style sono proprio lì a destra sotto la finestra di ispezione Attributi.
— Markymark,

31

Swift 5

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

Swift 4

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

2
Ottengo: digitare 'NSAttributedStringKey' (aka 'NSString') non ha un membro 'foregroundColor'
— Alfi,

Si prega di utilizzare il codice seguente per l'ultima versione xcode 10 e swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
— Bhavsang Jam

16

Per lavorare in goal -c devo inserire le seguenti righe viewWillAppearnel mio CustomViewController.

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

Per Swift2.x funziona:

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

Per Swift3.x funziona:

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

Ma quando torno a un altro viewcontroller anche il colore è cambiato. Qualche idea su come prevenirlo. Voglio che il mio viewcontroller principale sia un colore e l'altro un altro.
— user3163404

1
Penso che anche tu debba impostare il colore nel tuo nuovo controller di visualizzazione.
— Niko Klausnitzer,

13

Per fare questo lavoro nello storyboard (Interface Builder Inspector)

Con l'aiuto di IBDesignable, possiamo aggiungere più opzioni a Interface Builder Inspector per UINavigationControllere modificarle sullo storyboard. Innanzitutto, aggiungi il seguente codice al tuo progetto.

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

Quindi imposta semplicemente gli attributi per UINavigationController sullo storyboard.

inserisci qui la descrizione dell'immagine


7

Se vuoi impostare il colore della tinta e il colore della barra per l'intera app, puoi aggiungere il seguente codice ad AppDelegate.swift in

 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
`

Barra di navigazione TintColor e tintColor impostati


6

Aggiornato con swift 4

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

6

In Swift5 e Xcode 10

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

Mentre questo frammento di codice può risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
— 31piy

4

Swift 4.2 versione della risposta di Albert

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]

Mi è piaciuto molto come hai aggiunto questa risposta. .barTintColor non è un'opzione ora. Vuoi dire .backgroundColor?
— Ben

4

Impostazione del colore del testo del titolo della barra di navigazione su bianco nella versione 4.2 di Swift:

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

Rapido 4.1

Aggiungi una funzione a viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Nella setup()funzione aggiungi:

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

Per un colore personalizzato su TitleTextat NavigationBar, qui un codice semplice e breve per Swift 3:

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

o

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

Scorri verso l'alto tramite Swift 3.2 (non 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 funziona:

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

0

Swift 5.1

Copia e incolla solo ViewDidLoad()e modifica le sue dimensioni e le dimensioni di cui hai bisogno. Prima di copiare e incollare aggiungere la barra di navigazione nella parte superiore dello schermo.

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

Se non funziona, puoi provare a cambiare solo il colore del testo

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.