Como alterar a cor da barra de navegação no iOS 7?

213

Como altero a cor da barra de navegação no iOS 7?

Basicamente, quero alcançar algo como a barra de navegação do Twitter (Twitter atualizado para iOS7isso). Eu embuti uma barra de navegação no topo de uma view controller. Tudo o que eu quero é mudar a cor da barra de navegação para azul claro junto com a barra de utilitário na parte superior. Não consigo encontrar uma opção no meu storyboard.

Patricio Guerra
fonte
[[Aparência do UINavigationBar] setBarTintColor: [UIColor blackColor]]; este trabalho wll de ios 7 em diante
Chandramani
1
seguir a este tutorial appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

Respostas:

319

O comportamento de tintColorpara barras mudou no iOS 7.0. Não afeta mais o fundo da barra.

A partir da documentação:

Referência da classe barTintColor

A cor da tonalidade a ser aplicada ao fundo da barra de navegação.

@property(nonatomic, retain) UIColor *barTintColor

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

Disponibilidade

Disponível no iOS 7.0 e posterior.

Declarado em
UINavigationBar.h

Código

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Também podemos usar isso para verificar a versão do iOS como mencionado no iOS 7 UI Transition Guide

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDITAR Usando xib

enter image description here

Rajneesh071
fonte
3
mas onde posso colocar esse código ?? Eu sou muito novo nisso hahah. Coloquei-o dentro do aplicativo delegado e ele realmente não parece estar fazendo muito. Constrói muito bem embora.
Patricio Guerra
1
dentro viewController
Rajneesh071
1
Eu o colocaria em viewDidLoad no seu viewController.
HalR
2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Seria melhor testar em qual versão do iOS você está executando, conforme indicado pela apple no guia de transição: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson ''
1
Você também pode usar if ([self.navigationController.navigationBar respondesToSelector: @selector (setBarTintColor :)]) vs o número da versão para verificar se você pode definir barTintColor
SimpsOff
129

É muito fácil fazer o que a pergunta original - para obter a aparência da antiga barra de navegação do Twitter, fundo azul com texto em branco - é muito fácil, basta usar o Interface Builder no Xcode.

  • Usando o esquema do documento, selecione sua barra de navegação.
  • No Inspetor de Atributos, no grupo Barra de Navegação, altere o Estilo de Padrão para Preto. Isso altera a cor de fundo das barras de Navegação e Status para preto e o texto para branco. Portanto, a bateria e outros ícones e texto na barra de status ficarão brancos quando o aplicativo estiver em execução.
  • No mesmo grupo Barra de Navegação, altere a Tonalidade da Barra para a cor de sua preferência.
  • Se você tiver itens de botão de barra na barra de navegação, eles ainda mostrarão o texto na cor azul padrão; portanto, no Inspetor de atributos, grupo Exibir, altere o Tonalidade para Cor branca.

Isso deve fazer com que você queira. Aqui está uma captura de tela que facilitaria ver onde fazer as alterações.

Onde fazer as alterações necessárias, incluindo o resultado no iOS Simulator

Observe que alterar apenas a tonalidade da barra não altera a cor do texto na barra de navegação ou na barra de status. O estilo também precisa ser alterado.

alondono
fonte
A seleção de preto para o iOS 9 está obsoleta, qualquer chance de resposta atualizada
Rob85
@ Rob85 No momento, não estou na frente do Xcode, mas quando o Xcode 7 (com iOS 9) foi lançado, verifiquei que essas instruções ainda estavam atualizadas. Verifique se a Barra de navegação está selecionada, o estilo preto deve estar no inspetor de atributos da Barra de navegação.
Alondono 20/10
2
@ Rob85 Verifiquei o site e os estilos do desenvolvedor da Apple Defaulte Blackainda estamos disponíveis no iOS 9. Os itens obsoletos foram BlackOpaquee BlackTranslucent, que foram substituídos por uma combinação de Blackestilo e a caixa de seleção Translucent. UIBarStyle no site desenvolvedor da Apple
alondono
Desculpe, @alondono, você está absolutamente correto, eu estava clicando na barra de navegação no Controlador de Navegação, não no esquema do documento, por isso não consegui vê-lo. O preto que estou vendo descontinuado estava na métrica simulada-> barra de status. Obrigado por suas respostas
Rob85
@ Rob85 Cool! Obrigado por me avisar.
Alondono 21/10
76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color
pNre
fonte
4
E onde exatamente eu posso colocar esse código? Desculpem a pergunta novato lá hahah
Patricio Guerra
1
o código pode ser colocado no - (void) viewDidLoad método do controlador de navegação
pNre
2
No iOS 9, configurar o barTintColor como preto fará com que a hora, o nome do dispositivo e a bateria também sejam pretos, para que você não possa vê-los. Para evitar isso, em vez de usar barTintColor, use self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
precisa saber é o seguinte
46

Em um aplicativo baseado em navegação, você pode colocar o código no AppDelegate. Um código mais detalhado pode ser:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
RFG
fonte
6
adicionar [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];para iOS 7
Samin
24

Em viewDidLoad, defina:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Mude ( blueColor) para a cor que desejar.

zeezoo
fonte
18

Para mudar rapidamente a cor da barra de navegação:

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

alterar fonte, tamanho e cor do título:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]
William Hu
fonte
14

No iOS 7, você deve usar a propriedade -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];
RFG
fonte
13

Se você deseja usar um código hexadecimal, aqui está a melhor maneira de fazer isso.

Primeiro, defina isso no topo da sua classe:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Em seguida, dentro do "aplicativo didFinishLaunchingWithOptions", coloque isso:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Coloque seu código hexadecimal no lugar do 00b0f0.

Kyle Greenlaw
fonte
1
[Aparência do UINavigationBar] foi muito útil.
21715 Ken
11

Se você precisar oferecer suporte ao ios6 e ios7, obterá esse azul claro específico usando isso no seu UIViewController :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}
bbaassssiiee
fonte
3
No iOS 7: -self.navigationController.navigationBar.barTintColor é a cor da barra AND -self.navigationController.navigationBar.tintColor é a cor do texto dos botões (voltar, pronto ...).
IgniteCoders,
10

Na verdade, é mais fácil do que as respostas que eu vi aqui:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Espero que isso ajude alguém. Não gostei das respostas que vi. Eu gosto de manter meu código o mais limpo possível. Não estou dizendo que é errado fazer isso de forma programática, mas há pessoas por aí como eu ... isso é para vocês. Alterando a cor da barra de navegação

pqsk
fonte
Obrigado, eu mudei isso meses atrás enquanto brincava e não conseguia descobrir como mudar isso de volta!
Simétrico
Não tem problema, eu contente poderia ajudar alguém
pqsk
Eu acho que essa é a resposta mais direta! Thx
Ispas Claudiu
Sem problemas. Ainda bem que é útil
pqsk
5

Para completar o código de Rajneesh071, você também pode definir a cor do título da barra de navegação (e a fonte, se desejar), pois o comportamento padrão foi alterado do iOS 6 para 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
CodeBrew
fonte
5

Adicione apenas este código no seu ViewContorller ou no seuAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
Darshan Kunjadiya
fonte
4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}
Dashony
fonte
4

Em um aplicativo baseado em navegação, você pode alterar a cor

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
MaxEcho
fonte
1
Alterar a propriedade tintColor no iOS7 não tem mais o efeito de alterar a cor de fundo das barras. Cor da tonalidade em iOS7 só afeta a cor do texto dos BarButtonItems etc.
Pascal Bayer
4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }
Mubin Shaikh
fonte
3

Esta pergunta e essas respostas são úteis. Com eles, fui capaz de definir a cor azul escura desejada navigationBarcom o título branco e o texto do botão.

Mas eu também precisava mudar o relógio, a portadora, a intensidade do sinal etc. para branco. O preto simplesmente não contrastava o suficiente com o azul escuro.

I pode ter esquecido que a solução em uma das respostas anteriores, mas eu era capaz de fazer essa mudança adicionando esta linha ao meu nível superior viewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
John
fonte
UIStatusBarStyleLightContentfunciona, mas parece que a enumeração correto para setBarStyle:éUIBarStyleBlack
Collin Allen
3
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Gaurav Gilani
fonte
3

Para cor:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Para imagem

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];

fonte