Texto da barra de navegação do IOS 7 e cor da seta

234

Quero definir o plano de fundo para a Barra de Navegação ser preta e todas as cores dentro dela serem brancas .

Então, eu usei este código:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

Mas botão voltar a cor do texto , seta e botão da barra de ainda ter o padrão de cor azul .
Como mudar essas cores como na imagem abaixo?

insira a descrição da imagem aqui

1110
fonte
1
tente no AppDelegate if ([self.window respondeSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
precisa
Curiosamente, seu código funcionou muito bem para mim (só queria mudar a cor do texto para branco). Obrigado!
William T. Mallard
Qual é a cor azul que você está usando? Parece legal!
ebi
@ebi algumas pessoas não gostam de compartilhar. Basta usar um seletor de cores para selecioná-lo. Ou .... lá vai: RGB: (18, 60, 133)
pnizzle

Respostas:

753

O comportamento de algumas das propriedades de UINavigationBarfoi alterado a partir do iOS 7 . Você pode ver na imagem mostrada abaixo:

insira a descrição da imagem aqui


Dois belos links que eu gostaria de compartilhar com você. Para mais detalhes, você pode acessar estes links:

  1. Guia de transição da interface do usuário do iOS 7 .
  2. Como atualizar seu aplicativo para iOS 7 .

A documentação da Apple para barTintColor diz:

Essa cor é translúcida por padrão, a menos que você defina a propriedade translúcida como NO.

Código de amostra :

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;
Bhavin
fonte
Eu tentei: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 verde: 12.0 / 255.0 azul: 19.0 / 255.0 alfa: 1.0]; Mas tudo ainda é azul.
1110
2
Eu li isso antes, mas isso muda apenas o texto, mas não a seta. Ainda é azul :(
1110
1
@ 1110: Dê uma olhada em: Usando Tint Color
Bhavin
2
@ Chelsea: Que tal esta linha? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin
4
Não esqueça que você pode alterar a tonalidade de todo o aplicativo no appDelegate: [[UINavigationBar aparecimento] setTintColor: [UIColor blackColor]];
Simon_smiley
85

insira a descrição da imagem aqui

Este me levou cerca de meio dia para descobrir, mas é isso que funcionou para mim. Dentro do rootViewController que inicializa o navigationController, coloquei esse código dentro do meu método viewDidAppear:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

Meu post completo sobre isso aqui

John Riselvato
fonte
1
Se você estiver com problemas para alterar a cor da seta para trás, esse snippet corrigirá o problema. No mínimo, você precisará da última linha de código adicionada ao seu rootViewController real.
russes
Sim John. Eu perdi cerca de uma hora nisso ontem também. Um problema (grande problema) era que os documentos eram terríveis ao apontar todos os atributos possíveis. Alguma idéia de onde eles podem estar listados? TY.
Alex Zavatone
Obrigado @john Está sobrepondo minha cor personalizada. Você pode me explicar por quê?
Vaibhav Limbani
Eu acho que você deveria criar uma nova pergunta. Não sei dizer por que, a menos que veja seu código e o que você está fazendo. @MacGeek
John Riselvato
3
Obrigado, funcionou :). Mas UITextAttributeTextColor está obsoleta no iOS 7, agora você deve usar NSForegroundColorAttributeName
YYamil
37

Swift3, ios 10

Para atribuir globalmente a cor, no AppDelegate didFinishLaunchingWithOptions:

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

Swift 4, iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes
lifeisfoo
fonte
21

A resposta de Vin funcionou muito bem para mim. Aqui está a mesma solução para desenvolvedores de C # que usam Xamarin.iOS / MonoTouch:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;
benhorgen
fonte
Não sabia que era possível definir SetTitleTextAttributes da maneira que você definiu.
Brad Moore
12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes
LondonGuy
fonte
3
deixe textAttributes = NSMutableDictionary (capacidade: 1) agora é a chamada correta para a inicialização do NSMutableDictionary.
juliensaad
12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Abo3atef
fonte
1
Eu gosto dessa abordagem, pois você pode configurá-la no próprio AppDelegate e usa o proxy Appearance.
Niyog Ray
8

Para alterar a cor do UINavigationBartítulo da maneira correta, use este código:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColorfoi descontinuado na versão mais recente do ios 7. Use em NSForegroundColorAttributeNamevez disso.

aZtraL-EnForceR
fonte
5

Se você deseja alterar o tamanho do texto do título e a cor do texto, altere o titleTextAttributes do NSDictionary , para dois de seus objetos:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];
OhadM
fonte
2

Acho que as respostas anteriores estão corretas, essa é outra maneira de fazer a mesma coisa. Estou compartilhando aqui com outras pessoas, caso seja útil para alguém. É assim que você pode alterar a cor do texto / título da barra de navegação no ios7:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;
grepit
fonte
1

Parece que os Accessibilitycontroles iOS Settingssubstituem praticamente tudo o que você tenta fazer em termos de cores nos botões da barra de navegação. Certifique-se de ter todas as configurações nas posições padrão (defina aumentar contraste, texto em negrito , formas de botão, etc. como desativado), caso contrário você não verá nada mudar. Depois que o fiz, todo o código de alteração de cores começou a funcionar como esperado. Você pode não precisar desligá-los, mas eu não fui adiante.

strangeluck
fonte
Exatamente o que aconteceu comigo. Não consegui alterar a cor da tonalidade de um item de botão de barra quando o "Texto em negrito" estava ativado. Isso não é bom. Agora vou ter que usar um gráfico em vez :-(
Ken
0

Swift 5 / iOS 13

Para alterar a cor do título no controlador:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Mahdi Moqadasi
fonte