Cambia il colore del pulsante Indietro nella barra di navigazione


194

Sto cercando di cambiare il colore del pulsante Impostazioni in bianco, ma non riesco a farlo cambiare.

Ho provato entrambi:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

ma nessun cambiamento, sembra ancora così:

inserisci qui la descrizione dell'immagine

Come faccio a rendere quel pulsante bianco?

Risposte:


284

Puoi cambiare il colore globale della tinta nello storyboard facendo clic su uno spazio vuoto sulla lavagna e selezionando nella barra degli strumenti a destra "Mostra il file inspector", e vedrai nella parte inferiore della barra degli strumenti l'opzione "Tinta globale".

Opzione Tinta globale nello storyboard


7
woah .. Bella scoperta !. sai come farlo a livello di codice?
Paul Lehn,

10
Grande scoperta, ma cambiando la tinta globale in bianco (per la domanda originale) cambierà anche cose come gli indicatori di divulgazione dei dettagli della vista tabella in bianco, il che li renderebbe invisibili nella tabella in questione.
Mike Fischer,

1
Aggiungendo ai problemi di Mike: questo controllo rende anche tutti i tuoi pulsanti di testo di questo colore e quindi dovrai impostarli su un colore a mano (cioè ovviamente senza colori predefiniti) o semplicemente usare un metodo diverso.
Sirene,

4
Mentre questa è una soluzione rapida e semplice, porta ad altri problemi se il colore è bianco / corrisponde allo sfondo. Se si dispone di campi di testo, il cursore diventa impercettibile, il che lo fa sembrare all'utente come se non fossero in grado di scrivere su un campo di testo perché il cursore non è visibile.
Jose Ramirez,

5
@PaulLehn Per fare questo a livello di codice, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)puoi scrivere:self.window!.tintColor = .yourColor
mmika1000,

206

Questo codice cambia il colore della freccia

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Se questo non funziona, utilizzare il codice seguente:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Note

UIColor.whiteColor() e simili sono stati semplificati UIColor.white

Inoltre, molti opzionali precedentemente impliciti sono stati cambiati in espliciti, quindi potresti aver bisogno di:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()ha funzionato per me (Swift 2.2)
Mike Fischer,

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () ha funzionato per me (Swift 3)
Ajay.km

Puoi spiegare perché usare UIBarStyle.Black?
mmika1000,

Ti preghiamo di aggiornare: self.navigationController? .NavigationBar.tintColor =
mohonish

1
cambia solo la freccia, il testo indietro rimane sempre lo stesso in Xcode 11
jeff ayan


56

Dovresti usare questo:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

Ciò ha reso il pulsante bianco, ma ha reso il colore di sfondo molto più chiaro. Sai come dare di nuovo il colore pieno allo sfondo della barra?
Brandon Evans,

Questa è la risposta corretta Renderà la barra viola, impostando la barra ColorColor e i pulsanti titolo / barra bianchi.
zirinisp,

36

veloce

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
Utilizzare in rapido 3.
Deepak Tagadiya il

dimmi anche quale versione rapida puoi usare?
Deepak Tagadiya il

E quale classe / file / vc scrive questo codice nel progetto?
Deepak Tagadiya,

All'inizio della funzione setCloseButton () che viene chiamato su viewWillAppear.
Jayprakash Dubey,

scrivere nel file NextViewController.swift, anche scrivere in viewDidLoad ().
Deepak Tagadiya,

20

Puoi usarlo come questo. Mettilo dentro AppDelegate.swift.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

Rapido 4.2

Cambia il tema dell'app completo

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Cambia controller specifico

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

cambia il colore per tutta l'applicazione. Cosa succede se devo cambiarlo per uno schermo / un particolare particolari UINavigationController?
Vyachaslav Gerchicov,

@VyachaslavGerchicov sopra la risposta è per il tema completo dell'app, se si desidera modificare un controller specifico. Fai qualcosa del genere: let navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN

Se sei su iOS 13 non usi più didFinishLaunchingWithOptions, è stato spostato su SceneDelegate.
JBarros35,

15

In Swift3 , per impostare il pulsante Indietro su red.

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

questo imposterà la barra di navigazione, non la voce del pulsante barra
carlodonz,

1
Sì, questa era la domanda.
Vincent,

"Cambia colore del pulsante Indietro nella barra di navigazione"
carlodonz,

Questo è stato l'unico metodo che ha funzionato per me. Qualcosa sembra rotto con l'implementazione di Apple in questo momento ...
Dave Y

13

In Swift 4, puoi risolvere questo problema usando:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

Swift 3

La risposta più votata non è corretta per Swift 3.

inserisci qui la descrizione dell'immagine

Il codice corretto per cambiare colore è:

self.navigationController?.navigationBar.tintColor = UIColor.white

Se vuoi cambiare colore, cambia UIColor.white sopra al colore desiderato


Questo è stato l'unico metodo che ha funzionato per me. Qualcosa sembra rotto con l'implementazione di Apple in questo momento ...
Dave Y

7

Tutte le risposte impostate sono in UINavigationBar.appearance().tintColorconflitto con la documentazione di Apple in UIAppearance.h.

Nota per iOS7: su iOS7 la tintColorproprietà è stata spostata UIViewe ora ha un comportamento ereditato speciale descritto in UIView.h. Questo comportamento ereditato può essere in conflitto con il proxy aspetto e pertanto non tintColorè consentito con il proxy aspetto.

In Xcode, è necessario fare clic sui comandi su ogni proprietà che si desidera utilizzare con il proxy di aspetto per ispezionare il file di intestazione e assicurarsi che la proprietà sia annotata con UI_APPEARANCE_SELECTOR .

Quindi il modo corretto di colorare la barra di navigazione in viola e il titolo e i pulsanti bianchi in tutta l'app tramite il proxy aspetto è:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

Nota che UIBarButtonItemnon è una sottoclasse di UIViewma piuttosto NSObject. Quindi la sua tintColorproprietà non è ereditata tintColorda UIView.

Sfortunatamente, UIBarButtonItem.tintColornon è annotato con UI_APPEARANCE_SELECTOR- ma questo mi sembra un bug di documentazione. La risposta di Apple Engineering in questo radar afferma che è supportato.


UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // anche
Guilherme

6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Questo frammento fa la magia. Invece di redColor, cambiarlo come desiderato.


6

Usa questo codice in AppDelegateclasse, all'interno di didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

Proviamo questo codice:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

Grazie mille, signore
Arpit B Parekh,

4

nell'uso rapido 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();

4

Se hai già il pulsante Indietro nel controller della vista "Impostazioni" e vuoi cambiare il colore del pulsante Indietro nel controller della vista "Informazioni sul pagamento" in qualcos'altro, puoi farlo all'interno della vista "Impostazioni" del controller per prepararsi a seguire in questo modo :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Questo funziona per me, iOS 9.0+


2

Aggiungi il seguente codice alla funzione didFinishLaunchingWithOptions in AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

Questo codice mi dà il seguente errore: "Uso dell'identificatore non risolto 'uicolorFromHex'" Qualcuno può aiutarmi a risolverlo?
jonathan3087,

probabilmente un'estensione per UIColor. Puoi cercare StackOverflow come creare un'estensione.
KvdLingen,

2

Per Swift 2.0, Per cambiare il colore della tinta della barra di navigazione , il testo del titolo e il colore della tinta del pulsante Indietro sono cambiati usando quanto segue in AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

Non so perché nessuno lo abbia menzionato ... ma stavo facendo esattamente quello che stavi facendo nel mio viewDidLoad... e non funzionava. Quindi ho inserito il mio codice viewWillAppeare tutto ha funzionato.

La soluzione sopra è cambiare un singolo barbuttonItem. Se vuoi cambiare il colore per ogni barra di navigazione nel tuo codice, segui questa risposta .

Fondamentalmente cambiare la classe stessa usando appearance()è come fare un cambiamento globale su tutte le istanze di quella vista nella tua app. Per di più vedi qui


1

Hai una scelta per nascondere il pulsante Indietro e farlo con te stesso. Quindi imposta il suo colore.

L'ho fatto:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
La domanda riguardava in particolare lo stile dell'elemento di navigazione sinistro e questo è il più vicino a rispondere direttamente alla domanda.
crea

0

Sarà risolto con questa riga in - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro,

0

È necessario aggiungere questa riga

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

Preferisco NavigationController personalizzato piuttosto che impostare l'interfaccia utente globale o inserire ViewController.

Ecco la mia soluzione


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

Inoltre non è necessario pasticciare con Apple Api come EKEventEditViewController , PickerViewController e così via se si utilizzano impostazioni globali che ti piaccionoUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
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.