Cómo cambiar el color de fondo de UINavigationBar desde AppDelegate

90

Sé cómo cambiar la UINavigationBarimagen de fondo haciendo

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

y sé cómo establecer la barra en diferentes colores dentro de cada uno Views..... Ahora quiero cambiar el color de fondo sin usar una imagen a un color sólido del app delegate. No quiero configurarlo cada vez desde cada vista y no quiero escribir un CGRect.

Lo intenté [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];pero no funcionó y no puedo encontrar un código en ninguna parte que funcione en el delegado de la aplicación.

¿Alguien podría señalarme en la dirección correcta?

Jonathan Thurft
fuente

Respuestas:

202

Puedes usar [[UINavigationBar appearance] setTintColor:myColor];

Desde iOS 7 es necesario configurar [[UINavigationBar appearance] setBarTintColor:myColor];y también [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
Seb Thiebaud
fuente
Gracias, ¿sabes cómo eliminar el degradado blanco predeterminado que viene desde la parte superior para convertirlo en un color sólido?
Jonathan Thurft
1
Con tintColorel gradiente se quedará. Si no desea tener este degradado, necesita subclasificar su UINavigationBar O para hacer un UIImage para la apariencia.
Seb Thiebaud
59
en iOS 7 que no funcionó, tuve que usarnavigationBar.barTintColor = myColor;
Juan de la Torre
4
translucentLa propiedad simplemente no se puede configurar usando UIAppearance en iOS 6 y iOS 7. Por [[UINavigationBar appearance] setTranslucent:NO]lo tanto , la aplicación se bloqueará con un NSInvalidArgumentExceptionerror. Utilice [self.navigationController.navigationBar setTranslucent:NO]o anule la selección de la transparencia mediante IB.
Sam
1
Versión Swift: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034
103

Para cambiar el color de fondo y no el tinte, el siguiente código funcionará:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
LJ1
fuente
3
Esta debería ser la respuesta aceptada, funciona perfectamente para iOS7.
joshuahornby10
Respuesta correcta para iOS 7. Trabajando para mí.
LondonGuy
La translucidez es el requisito para que esto funcione. Como la respuesta aceptada no incluye eso, esta debería ser la respuesta aceptada.
Tristan Warner-Smith
3
Solo para aclarar, la respuesta aceptada es para AppDelegate y esto es para View Controller.
Dean
@Dean tiene razón. La respuesta aceptada tendrá efecto para las recién creadas UIViewControllers, mientras que esta mostrará efectos cada vez que se llame.
aramusss
18

Para hacer esto en iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];
Litera Lasse
fuente
15

Sintaxis rápida:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Acabo de poner eso en AppDelegate didFinishLaunchingWithOptions y persiste en toda la aplicación

Dustin Williams
fuente
8

Rápido :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Hemang
fuente
6

Puede hacer esto fácilmente con Xcode 6.3.1. Seleccione su barra de navegación en el esquema del documento. Seleccione el inspector de atributos. Desmarque Translúcido. Establezca Bar Tint en el color deseado. ¡Hecho!

ronm333
fuente
Gracias, encontré muchas referencias sobre cómo hacer esto en ObjC y rápido, pero nadie menciona que está disponible en IB
Nick
3

Como mencionan las otras respuestas, puede usar setTintColor: , pero desea un color sólido y no es posible configurar el color del tinte AFAIK.

La solución es crear una imagen mediante programación y establecer esa imagen como imagen de fondo para todas las barras de navegación a través de UIAppearance. Acerca del tamaño de la imagen, no estoy seguro de si una imagen de 1x1 píxeles funcionaría o si necesita el tamaño exacto de la barra de navegación. Consulte la segunda respuesta de esta pregunta para ver cómo crear la imagen.

Como consejo, no me gusta "sobrecargar" al delegado de la aplicación con este tipo de cosas. Lo que tiendo a hacer es crear una clase nombrada AppearanceConfigurationcon un solo método público configureAppearancedonde configuro todas las cosas de UIAppearance que quiero, y luego llamo a ese método desde el delegado de la aplicación.

e1985
fuente
2

Puede establecer el color de fondo de UINavigation utilizando este código en cualquier controlador de vista

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];
amar
fuente
2

En Swift 4.2 y Xcode 10.1

Puede cambiar el color de la barra de navegación desde su AppDelegate directamente a todo su proyecto.

En didFinishLaunchingWithOptions launchOptions:escribir a continuación a las líneas de código

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

aquí

tintColor es para establecer imágenes de fondo como el botón de retroceso y las imágenes de las líneas de menú, etc.

barTintColor es para el color de fondo de la barra de navegación

Si desea establecer el color de la barra de navegación del controlador de vista específico, escriba el código siguiente en viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

ingrese la descripción de la imagen aquí

iOS
fuente
-1

El código de color es el problema aquí. En lugar de usar 195/255, use 0.7647 o 195.f / 255.f El problema es que la conversión del flotador no funciona correctamente. Intente usar el valor flotante exacto.

ganka
fuente