Texto de barra de navegación IOS 7 y color de flecha

234

Quiero establecer el fondo para que la barra de navegación sea negra y todos los colores dentro de ella sean blancos .

Entonces, usé 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]];

Pero el color del texto del botón de retroceso , la flecha y el botón de la barra todavía tienen el color azul predeterminado .
¿Cómo cambiar esos colores como en la imagen de abajo?

ingrese la descripción de la imagen aquí

1110
fuente
1
intente en AppDelegate if ([self.window respondeToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S
Curiosamente, su código funcionó muy bien para mí (solo quería cambiar el color del texto a blanco). ¡Gracias!
William T. Mallard
¿Cuál es el color azul que estás usando? ¡Se ve bien!
ebi
@ebi a algunas personas no les gusta compartir. Simplemente use un selector de color para seleccionarlo. O ... ahí lo tienes: RGB: (18, 60, 133)
pnizzle

Respuestas:

753

El comportamiento de algunas de las propiedades de UINavigationBarha cambiado desde iOS 7 . Puedes ver en la imagen que se muestra a continuación:

ingrese la descripción de la imagen aquí


Dos hermosos enlaces que me gustaría compartir con ustedes. Para más detalles puede ir a través de estos enlaces:

  1. Guía de transición de la interfaz de usuario de iOS 7 .
  2. Cómo actualizar su aplicación para iOS 7 .

La documentación de Apple para barTintColor dice:

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

Código de muestra :

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
fuente
He intentado: 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]; Pero todo sigue siendo azul.
1110
2
Lo leí antes, pero esto solo cambia el texto pero no la flecha. Todavía es azul :(
1110
1
@ 1110: Eche un vistazo a: Uso del color de tinte
Bhavin
2
@Chelsea: ¿Qué tal esta línea? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin
44
No olvide que puede cambiar el tinte para toda la aplicación en la aplicación Delegar: [[Apariencia UINavigationBar] setTintColor: [UIColor blackColor]];
simon_smiley
85

ingrese la descripción de la imagen aquí

Esto me llevó alrededor de medio día para resolverlo, pero esto es lo que funcionó para mí. Dentro del rootViewController que inicializa el navigationController, pongo este código dentro de mi 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]];

Mi publicación completa sobre esto aquí

John Riselvato
fuente
1
Si tiene problemas para cambiar el color de la flecha hacia atrás, este fragmento solucionará el problema. Como mínimo, necesitará la última línea de código agregada a su rootViewController real.
Rusia
Si John. Ayer también perdí aproximadamente una hora en esto. Un problema (gran problema) era que los documentos eran terribles al señalar todos los atributos posibles. ¿Alguna idea de dónde podrían estar listados? TY.
Alex Zavatone
Gracias @john Se superpone a mi Color personalizado, ¿Me puede explicar por qué?
Vaibhav Limbani
Creo que deberías crear una nueva pregunta. No podría decirte por qué a menos que vea tu código y lo que estás haciendo. @MacGeek
John Riselvato
3
Gracias, funcionó :). Pero UITextAttributeTextColor está en desuso en iOS 7, ahora debe usar NSForegroundColorAttributeName
YYamil
37

Swift3, ios 10

Para asignar globalmente el color, en 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
fuente
21

La respuesta de Vin funcionó muy bien para mí. Aquí está la misma solución para los desarrolladores de C # que usan 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
fuente
No sabía que podía establecer SetTitleTextAttributes como lo hizo.
Brad Moore
12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes
LondresGuy
fuente
3
let textAttributes = NSMutableDictionary (capacidad: 1) es ahora la llamada correcta para la inicialización NSMutableDictionary.
juliensaad
12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Abo3atef
fuente
1
Me gusta este enfoque, ya que puede configurarlo en AppDelegate, y usa el proxy Apariencia.
Niyog Ray
8

Para cambiar el color del UINavigationBartítulo de la manera correcta, use este código:

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

UITextAttributeTextColorestá en desuso en la última versión de ios 7. Usar en su NSForegroundColorAttributeNamelugar.

aZtraL-Enforce
fuente
5

Si desea cambiar el tamaño del texto del título y el color del texto , debe cambiar el título NSDictionary titleTextAttributes para 2 de sus objetos:

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

Creo que las respuestas anteriores son correctas, esta es otra forma de hacer lo mismo. Lo estoy compartiendo aquí con otros por si acaso se vuelve útil para alguien. Así es como puede cambiar el color del texto / título de la barra de navegación en 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
fuente
1

Parece que los Accessibilitycontroles en la iOS Settingsanulación prácticamente todo lo que intentas hacer con respecto al color de los botones de la barra de navegación. Asegúrese de tener todas las configuraciones en las posiciones predeterminadas (ajuste el aumento de contraste, texto en negrita , formas de botones, etc. a desactivado) de lo contrario no verá ningún cambio. Una vez que lo hice, todo el código de cambio de color comenzó a funcionar como se esperaba. Es posible que no necesite apagarlos todos, pero no lo busqué más.

extraño
fuente
Exactamente lo que me pasó. No pude cambiar el color de tinte de un elemento de botón de barra cuando estaba activado "Texto en negrita". Eso no es bueno. Ahora tendré que usar un gráfico en su lugar :-(
Ken
0

Swift 5 / iOS 13

Para cambiar el color del título en el controlador:

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