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.