Alterar a cor do botão Voltar na barra de navegação

192

Estou tentando alterar a cor do botão Configurações para branco, mas não consigo alterá-lo.

Eu tentei os dois:

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

mas nenhuma mudança, ainda fica assim:

insira a descrição da imagem aqui

Como faço para tornar esse botão branco?

Brandon Evans
fonte

Respostas:

283

Você pode alterar a cor da tonalidade global no seu storyboard clicando em um espaço vazio no quadro e selecionando na barra de ferramentas direita "Mostrar o inspetor de arquivos", e você verá na parte inferior da barra de ferramentas a opção "Tonalidade global".

Opção Global Tint no storyboard

Etgar
fonte
7
woah .. Bom achado! você sabe como fazer isso programaticamente?
Paul Lehn
10
Ótima descoberta, mas alterar o tom global para branco (de acordo com a pergunta original) também mudará itens como indicadores de divulgação de detalhes de exibição de tabela para branco, o que os tornaria invisíveis na tabela em questão.
Mike Fischer
1
Acrescente-se aos problemas de Mike: esse controle também torna todos os botões de texto dessa cor e você precisará defini-los manualmente com uma cor (ou seja, sem cores padrão obviamente) ou simplesmente usar um método diferente.
Sirens
4
Embora essa seja uma solução rápida e fácil, ela gera outros problemas se a cor for branca / coincidir com o plano de fundo. Se você possui campos de texto, torna o cursor imperceptível, o que faz com que pareça ao usuário como se ele não pudesse escrever em um campo de texto porque o cursor não está visível.
Jose Ramirez
5
@PaulLehn Para fazer isso programaticamente, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)você pode escrever:self.window!.tintColor = .yourColor
mmika1000 3/19/19
205

Este código altera a cor da seta

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

Se isso não funcionar, use o código abaixo:

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

Swift 3 Notes

UIColor.whiteColor() e similares foram simplificados para UIColor.white

Além disso, muitos opcionais implícitos anteriormente foram alterados para explícitos; portanto, você pode precisar de:

self.navigationController?.navigationBar =
Chamath Jeevan
fonte
7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()funcionou para mim (Swift 2.2)
Mike Fischer
self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () trabalhou para mim (Swift 3)
Ajay.km
Você pode explicar por que usar o UIBarStyle.Black?
mmika1000
Atualize: self.navigationController? .NavigationBar.tintColor =
mohonish
1
só muda a seta, texto de volta ainda permanece o mesmo em Xcode 11
jeff ayan
93

Muito fácil de configurar no storyboard:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

AlessandroDP
fonte
Perfeito, obrigado :) #
194 Naresh Reddy M
55

Você deve usar isto:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Tiep Vu Van
fonte
Isso deixou o botão branco, mas a cor do fundo ficou muito mais clara. Você sabe como dar outra cor ao fundo da barra?
Brandon Evans
Essa é a resposta correta. Isso tornará a barra roxa, definindo o barTintColor e os botões de título / barra em branco.
Zirinisp
35

Rápido

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }
Deepak Tagadiya
fonte
1
Usar em rápida 3.
Deepak Tagadiya
também me diga qual versão rápida você pode usar?
Deepak Tagadiya
E qual classe / arquivo / vc escreve esse código no projeto?
Deepak Tagadiya
No início da função setCloseButton (), que é chamada em viewWillAppear.
Jayprakash Dubey
escreva no arquivo NextViewController.swift, também escreva em viewDidLoad ().
perfil completo de Deepak Tagadiya
20

Você pode usar como este. Coloque-o 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
    }
Mohammad Nurdin
fonte
20

Swift 4.2

Alterar o tema completo do aplicativo

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Alterar controlador específico

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

present(navController, animated: true, completion: nil)
AiOsN
fonte
muda a cor para toda a aplicação. E se eu precisar alterá-lo para uma tela específica / particular UINavigationController?
Vyachaslav Gerchicov 23/11
A resposta acima @VyachaslavGerchicov é para o tema completo do aplicativo, se você quiser alterar o controlador específico. Fazer algo como isto: vamos NavController = UINavigationController.init (RootViewController: yourViewController) navController.navigationBar.tintColor = .Red
AiOsN
Se você está no iOS 13, não usa mais o didFinishLaunchingWithOptions, ele foi movido para o SceneDelegate.
JBarros35
15

No Swift3 , Para definir o botão Voltar para red.

self.navigationController?.navigationBar.tintColor = UIColor.red
Vincent
fonte
isto irá definir a barra de navegação, não o item botão da barra
carlodonz
1
Sim, essa era a pergunta.
28418 Vincent Vincent
"Alterar cor do botão Voltar na barra de navegação"
carlodonz 28/02
Este foi o único método que funcionou para mim. Algo parece quebrado com a implementação da Apple agora ...
Dave Y
13

No Swift 4, você pode resolver esse 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
Darrell Richards
fonte
8

Swift 3

A resposta mais votada não está correta para o Swift 3.

insira a descrição da imagem aqui

O código correto para mudar de cor é:

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

Se você deseja alterar a cor, altere UIColor.white acima para a cor desejada

Elon R.
fonte
Este foi o único método que funcionou para mim. Algo parece quebrado com a implementação da Apple agora ...
Dave Y
7

Todas as respostas configuradas UINavigationBar.appearance().tintColorentram em conflito com a documentação da Apple em UIAppearance.h.

Nota para iOS7: no iOS7, a tintColorpropriedade foi movida para UIViewe agora possui um comportamento herdado especial descrito em UIView.h. Esse comportamento herdado pode entrar em conflito com o proxy de aparência e, portanto, tintColoragora não é permitido com o proxy de aparência.

No Xcode, você precisa clicar com o botão direito do mouse em cada propriedade que deseja usar com o proxy de aparência para inspecionar o arquivo de cabeçalho e garantir que a propriedade esteja anotada UI_APPEARANCE_SELECTOR.

Portanto, a maneira correta de colorir a barra de navegação de roxo e o título e os botões brancos em todo o aplicativo por meio do proxy de aparência é:

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

Observe que UIBarButtonItemnão é uma subclasse de UIViewmas sim NSObject. Portanto, sua tintColorpropriedade não é a herdada tintColorde UIView.

Infelizmente, UIBarButtonItem.tintColornão é anotado com UI_APPEARANCE_SELECTOR- mas isso me parece um bug de documentação. A resposta da Apple Engineering neste radar afirma que é suportada.

Jamie McDaniel
fonte
UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // também
Guilherme
6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Este trecho faz a mágica. Em vez da redColor, altere-a como desejar.

Suresh Kumar Durairaj
fonte
6

Use esse código na AppDelegateclasse, dentro de didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}
M.Nadeeshan
fonte
4

Vamos tentar este código:

 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
}
Mannam Brahmam
fonte
Muito obrigado, senhor
Arpit B Parekh
4

no uso rápido 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Riccardo Caroli
fonte
4

Se você já possui o botão Voltar no seu controlador de exibição "Configurações" e deseja alterar a cor do botão Voltar no controlador de exibição "Informações de pagamento" para outra coisa, você pode fazê-lo dentro do modo de exibição "Configurações" do controlador que se prepara para seguir assim :

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               
    }
}
Despotovic
fonte
3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Isso funciona para mim, iOS 9.0 ou superior

yuchen
fonte
2

Adicione o seguinte código para didFinishLaunchingWithOptions função em 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()]
Jayprakash Dubey
fonte
Este código me fornece o seguinte erro: "Uso do identificador não resolvido 'uicolorFromHex'" Alguém pode me ajudar a resolver isso?
jonathan3087
provavelmente uma extensão para o UIColor. Você pode pesquisar o stackoverflow como criar uma extensão.
KvdLingen
2

Para o Swift 2.0, Para alterar a cor da tonalidade da barra de navegação , o texto do título e a cor da tonalidade do botão Voltar alterados usando o seguinte em 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
}
yazh
fonte
2

Não sei por que ninguém mencionou isso ... mas eu estava fazendo exatamente o que você estava fazendo no meu viewDidLoad... e não estava funcionando. Então eu coloquei meu código viewWillAppeare tudo funcionou.

A solução acima é alterar um único item de barbutton. Se você deseja alterar a cor de cada barra de navegação no seu código, siga esta resposta .

Basicamente, mudar para a própria classe usando appearance()é como fazer uma alteração global em todas as instâncias dessa exibição no seu aplicativo. Para mais veja aqui

Mel
fonte
1

Você tem uma opção para ocultar o botão Voltar e fazê-lo com você mesmo. Em seguida, defina sua cor.

Eu fiz isso:

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()
Muhammad Ahmed Baig
fonte
1
A pergunta era especificamente sobre o estilo do item de navegação esquerdo e é o mais próximo de responder à pergunta diretamente.
craft
0

Será resolvido com esta linha em - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
Ertaky
fonte
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
DengApro 2/11
0

Você deve adicionar esta linha

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black
Monir Khlaf
fonte
0

Prefiro o NavigationController personalizado em vez de definir a interface do usuário global ou colocar o ViewController.

Aqui está a minha solução


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) {

  }

}

Além disso, você não precisa mexer com a Apple Api como EKEventEditViewController , PickerViewController e assim por diante, se você usar configurações globais da interface do usuário comoUIBarButtonItem.appearance().tintColor = .white

tylerlantern
fonte
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
Vaibhav Gaikwad
fonte