¿Cómo cambiar el color de la barra de navegación en iOS 7?

213

¿Cómo cambio el color de la barra de navegación en iOS 7?

Básicamente quiero lograr algo como la barra de navegación de Twitter (Twitter actualizado para iOS7eso es). Incruste en una barra de navegación encima de a view controller. Todo lo que quiero es cambiar el color de la barra de navegación a azul claro junto con la barra de utilidades en la parte superior. Parece que no puedo encontrar una opción en mi storyboard.

Patricio Guerra
fuente
[[Apariencia UINavigationBar] setBarTintColor: [UIColor blackColor]]; esto funcionará desde iOS 7 en adelante
Chandramani
1
siga este tutorial appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

Respuestas:

319

El comportamiento de tintColorfor bars ha cambiado en iOS 7.0. Ya no afecta el fondo de la barra.

De la documentación:

Referencia de clase barTintColor

El color de tinte para aplicar al fondo de la barra de navegación.

@property(nonatomic, retain) UIColor *barTintColor

Discusión
Este color se hace translúcido por defecto a menos que establezca la propiedad translúcida en NO.

Disponibilidad

Disponible en iOS 7.0 y posterior.

Declarado en
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];
}

También podemos usar esto para verificar la versión de iOS como se menciona en la Guía de transición de la interfaz de usuario de iOS 7

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

ingrese la descripción de la imagen aquí

Rajneesh071
fuente
3
pero ¿dónde puedo colocar este código? Soy muy nuevo en esto jaja. Lo puse dentro del delegado de la aplicación y realmente no parece estar haciendo mucho. Sin embargo, se construye muy bien.
Patricio Guerra
1
inside viewController
Rajneesh071
1
Lo pondría en viewDidLoad en su viewController.
HalR
2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Esto sería mejor para probar en qué versión de iOS está ejecutando, como lo indica apple en la guía de transición: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson el
1
También puede usar if ([self.navigationController.navigationBar respondeToSelector: @selector (setBarTintColor :)]) frente al número de versión para verificar si puede establecer barTintColor
SimpsOff
129

Hacer lo que pedía la pregunta original —para obtener el aspecto antiguo de la barra de navegación de Twitter, fondo azul con texto blanco— es muy fácil de hacer simplemente usando Interface Builder en Xcode.

  • Usando el esquema del documento, seleccione su barra de navegación.
  • En el Inspector de atributos, en el grupo Barra de navegación, cambie el Estilo de Predeterminado a Negro. Esto cambia el color de fondo de las barras de navegación y estado a negro, y su texto a blanco. Entonces, la batería y otros íconos y texto en la barra de estado se verán blancos cuando la aplicación se esté ejecutando.
  • En el mismo grupo de Barra de navegación, cambie el Tinte de barra al color que desee.
  • Si tiene elementos de Botón de barra en su Barra de navegación, estos seguirán mostrando su texto en el color azul predeterminado, por lo que en el Inspector de atributos, grupo Ver, cambie el Tinte a Color blanco.

Eso debería darte lo que quieres. Aquí hay una captura de pantalla que facilitaría ver dónde realizar los cambios.

Dónde realizar los cambios necesarios, incluido el resultado en iOS Simulator

Tenga en cuenta que cambiar solo el Tinte de barra no cambia el color del texto en la Barra de navegación o la Barra de estado. El estilo también necesita ser cambiado.

alondono
fuente
La selección de negro para iOS 9 está en desuso, cualquier posibilidad de una respuesta actualizada
Rob85
@ Rob85 No estoy frente a Xcode en este momento, pero cuando se lanzó Xcode 7 (con iOS 9) verifiqué que estas instrucciones todavía estaban actualizadas. Asegúrese de que la barra de navegación esté seleccionada, el estilo negro debe estar en el inspector de atributos de la barra de navegación.
alondono
2
@ Rob85 He revisado el sitio web del desarrollador de Apple, y los estilos Defaulty Blacktodavía están disponibles en iOS 9. Los obsoletos son BlackOpaquey BlackTranslucent, que fueron reemplazados por una combinación de Blackestilo y la casilla Translúcido. UIBarStyle en el sitio web para desarrolladores de Apple
alondono
Lo siento @alondono, tienes toda la razón, estaba haciendo clic en la barra de navegación del Controlador de navegación, no en el esquema del documento, por eso no pude verlo. El negro que veo obsoleto estaba en la métrica simulada-> barra de estado. Gracias por sus respuestas
Rob85
@ Rob85 ¡Genial! Gracias por hacérmelo saber.
alondono
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
fuente
44
¿Y dónde exactamente puedo poner este código? Perdón por la pregunta de novato allí jaja
Patricio Guerra
1
el código se puede colocar en el método - (vacío) viewDidLoad del controlador de navegación
pNre
2
En iOS 9, configurar el barTintColor en negro hará que la hora, el nombre del dispositivo y la batería también sean negros para que no pueda verlos. Para evitar esto, en lugar de usar barTintColor, use self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff
46

En una aplicación basada en navegación, puede poner el código en AppDelegate. Un código más detallado podría 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
fuente
66
agregar [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];para iOS 7
Samin
24

En viewDidLoad, establecer:

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

Cambie ( blueColor) al color que desee.

zeezoo
fuente
18

Para cambiar rápidamente el color de la barra de navegación:

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

cambiar la fuente del título, tamaño, color:

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

En iOS 7 debe usar la propiedad -barTintColor:

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

Si desea utilizar un código hexadecimal, esta es la mejor manera de hacerlo.

Primero, defina esto en la parte superior de su clase:

#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]

Luego, dentro de la "aplicación didFinishLaunchingWithOptions", pon esto:

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

Ponga su código hexadecimal en lugar de 00b0f0.

Kyle Greenlaw
fuente
1
[Apariencia UINavigationBar] fue muy útil.
Ken
11

Si necesita admitir ios6 y ios7, entonces obtiene ese azul claro particular usando esto en su 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
fuente
3
En iOS 7: -self.navigationController.navigationBar.barTintColor es el color de la barra Y -self.navigationController.navigationBar.tintColor es el color del texto de los botones (atrás, listo ...).
IgniteCoders
10

En realidad es más fácil que las respuestas que he visto aquí:

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 esto ayude a alguien. No me gustaron las respuestas que vi. Me gusta mantener mi código lo más limpio posible. No digo que esté mal hacerlo programáticamente, pero hay personas como yo ... esto es para ustedes. Cambio de color de la barra de navegación.

pqsk
fuente
¡Gracias, había cambiado esto hace meses mientras jugaba y no pude encontrar la forma de volver a cambiarlo!
Simétrico
No hay problema, me alegro de poder ayudar a alguien
pqsk
¡Creo que esta es la respuesta más directa! Thx
Ispas Claudiu
No hay problema. Me alegra que siga siendo útil
pqsk
5

Para completar el código de Rajneesh071, también puede configurar el color del título de la barra de navegación (y la fuente, si lo desea) ya que el comportamiento predeterminado cambió de iOS 6 a 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
fuente
5

Agregue solo este código en su ViewContorller o en suAppDelegate

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
fuente
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
fuente
4

En una aplicación basada en navegación puedes cambiar de color

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
fuente
1
Cambiar la propiedad tintColor en iOS7 ya no tiene el efecto de cambiar el color de fondo de las barras. El color de tinte en iOS7 solo afecta el color del texto de 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
fuente
3

Esta pregunta y estas respuestas son útiles. Con ellos pude establecer el color azul oscuro deseado navigationBarcon el título blanco y el texto del botón.

Pero también necesitaba cambiar el reloj, la portadora, la intensidad de la señal, etc. a blanco. El negro simplemente no contrastaba lo suficiente con el azul oscuro.

Puede que haya pasado por alto que la solución en una de las respuestas anteriores, pero yo era capaz de hacer que el cambio mediante la adición de esta línea a nivel superior viewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
Juan
fuente
UIStatusBarStyleLightContentfunciona, pero parece que la enumeración correcta setBarStyle:esUIBarStyleBlack
Collin Allen
3
- (void)viewDidLoad
{
    [super viewDidLoad];

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

Para el color:

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

Para la imagen

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

fuente