Barra de navegación del iPhone Color del texto del título

Parece que el color del título de la barra de navegación iOS es blanco por defecto. ¿Hay alguna manera de cambiarlo a un color diferente?

Conozco el enfoque navigationItem.titleView usando una imagen. Como mis habilidades de diseño son limitadas y no pude obtener el brillo estándar, prefiero cambiar el color del texto.

Cualquier idea sería muy apreciada.

Enfoque moderno

La forma moderna, para todo el controlador de navegación … hazlo una vez, cuando se cargue la vista raíz de tu controlador de navegación.

 [self.navigationController.navigationBar setTitleTextAttributes: @{NSForegroundColorAttributeName:[UIColor yellowColor]}]; 

Sin embargo, esto no parece tener un efecto en vistas posteriores.

Enfoque clásico

La vieja forma, controlador de vista (estas constantes son para iOS 6, pero si quieres hacerlo por controlador de vista en iOS 7, querrás el mismo enfoque pero con constantes diferentes):

Necesita usar un UILabel como titleView del titleView de navigationItem .

La etiqueta debe:

  • Tener un color de fondo claro ( label.backgroundColor = [UIColor clearColor] ).
  • Use la fuente del sistema en negrita de 20 pt ( label.font = [UIFont boldSystemFontOfSize: 20.0f] ).
  • Tiene una sombra de negro con un 50% de alfa ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5] ).
  • También querrá establecer la alineación del texto en centrado ( label.textAlignment = NSTextAlignmentCenter ( UITextAlignmentCenter para SDK anteriores).

Establezca el color del texto de la etiqueta para que sea el color personalizado que desee. Usted quiere un color que no haga que el texto se mezcle con la sombra, lo que sería difícil de leer.

Lo resolví mediante prueba y error, pero los valores que obtuve son en última instancia demasiado simples para que no sean lo que Apple escogió. 🙂

Si desea verificar esto, coloque este código en initWithNibName:bundle: en PageThreeViewController.m de la muestra PageThreeViewController.m de Apple . Esto reemplazará el texto con una etiqueta amarilla. Esto debería ser indistinguible del original producido por el código de Apple, a excepción del color.

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // this will appear as the title in the navigation bar UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = NSTextAlignmentCenter; // ^-Use UITextAlignmentCenter for older SDKs. label.textColor = [UIColor yellowColor]; // change this color self.navigationItem.titleView = label; label.text = NSLocalizedString(@"PageThreeTitle", @""); [label sizeToFit]; } return self; } 

Editar: También, lea la respuesta de Erik B a continuación. Mi código muestra el efecto, pero su código ofrece una forma más sencilla de colocar esto en su lugar en un controlador de vista existente.

Sé que este es un hilo muy antiguo, pero creo que sería útil saber para los nuevos usuarios que iOS 5 trae una nueva propiedad para establecer las propiedades del título.

Puede usar setTitleTextAttributes de setTitleTextAttributes para configurar la fuente, el color, el desplazamiento y el color de la sombra.

Además, puede establecer los mismos atributos de texto de título de UINavigationBar para todos los UINavigationBars toda su aplicación.

Por ejemplo, así:

 NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor],UITextAttributeTextColor, [UIColor blackColor], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil]; [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes]; 

En iOS 5, puede cambiar el color del título de la barra de navegación de esta manera:

 navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]}; 

Basado en la respuesta de Steven Fisher, escribí este fragmento de código:

 - (void)setTitle:(NSString *)title { [super setTitle:title]; UILabel *titleView = (UILabel *)self.navigationItem.titleView; if (!titleView) { titleView = [[UILabel alloc] initWithFrame:CGRectZero]; titleView.backgroundColor = [UIColor clearColor]; titleView.font = [UIFont boldSystemFontOfSize:20.0]; titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; titleView.textColor = [UIColor yellowColor]; // Change to desired color self.navigationItem.titleView = titleView; [titleView release]; } titleView.text = title; [titleView sizeToFit]; } 

La ventaja de este código, además de tratar con el marco correctamente, es que si cambia el título de su controlador, la vista del título personalizado también se actualizará. No es necesario actualizarlo manualmente.

Otra gran ventaja es que hace que sea realmente sencillo habilitar el color del título personalizado. Todo lo que necesita hacer es agregar este método al controlador.

La mayoría de las sugerencias anteriores están en desuso ahora, para el uso de iOS 7:

 NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor],NSForegroundColorAttributeName, [UIColor whiteColor],NSBackgroundColorAttributeName,nil]; self.navigationController.navigationBar.titleTextAttributes = textAttributes; self.title = @"Title of the Page"; 

Además, revise NSAttributedString.h para obtener varias propiedades de texto que se podrían establecer.

En iOS 7 y 8, puede cambiar el color del Título para decir verde

 self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName]; 

Para mantener la pregunta actualizada, agregaré la solución de Alex RR , pero en Swift :

 self.navigationController.navigationBar.barTintColor = .blueColor() self.navigationController.navigationBar.tintColor = .whiteColor() self.navigationController.navigationBar.titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.whiteColor() ] 

Que resulta para:

enter image description here

La solución de tewha funciona bien si está intentando cambiar el color de una página, pero quiero poder cambiar el color en cada página. Hice algunas pequeñas modificaciones para que funcione para todas las páginas en un UINavigationController

NavigationDelegate.h

 //This will change the color of the navigation bar #import  @interface NavigationDelegate : NSObject { } @end 

NavigationDelegate.m

 #import "NavigationDelegate.h" @implementation NavigationDelegate - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text? UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = UITextAlignmentCenter; label.textColor = [UIColor yellowColor]; //The two lines below are the only ones that have changed label.text=viewController.title; viewController.navigationItem.titleView = label; } @end 

Desde iOS 5 en adelante tenemos que establecer el color del texto del título y la fuente de la barra de navegación usando titleTextAttribute Dictionary (diccionario predefinido en la referencia de la clase del controlador UInavigation).

  [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor],UITextAttributeTextColor, [UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]]; 

Método 1 , configúralo en IB:

enter image description here

Método 2 , una línea de código:

 navigationController?.navigationBar.barTintColor = UIColor.blackColor() 

Use el código siguiente en cualquier controlador de vista viewDidLoad o viewWillAppear method.

 - (void)viewDidLoad { [super viewDidLoad]; //I am using UIColor yellowColor for an example but you can use whatever color you like self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]}; //change the title here to whatever you like self.title = @"Home"; // Do any additional setup after loading the view. } 

Versión Swift

Descubrí que la mayoría de ustedes presentaron las respuestas de la versión de Objective_C

Me gustaría implementar esta función usando Swift para cualquiera que lo necesite.

En ViewDidload

1.Para hacer que el fondo de NavigationBar se convierta en color (por ejemplo: AZUL)

 self.navigationController?.navigationBar.barTintColor = UIColor.blueColor() 

2.Para hacer que NavigationBar se convierta en Imagen (por ejemplo: ABC.png)

 let barMetrix = UIBarMetrics(rawValue: 0)! self.navigationController?.navigationBar .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix) 

3. Para cambiar el título de NavigationBar (por ejemplo: [Font: Futura, 10] [Color: Red])

 navigationController?.navigationBar.titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.redColor(), NSFontAttributeName : UIFont(name: "Futura", size: 10)! ] 

(sugerencia 1: no olvide la marca “!” después del UIFont)

(sugerencia2: hay muchos atributos del texto del título, haga clic en el comando “NSFontAttributeName”, puede ingresar a la clase y ver keyNames y los tipos de objetos que necesitan)

¡Espero poder ayudar!: D

Corto y dulce.

 [[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}]; 

Esta es mi solución basada en Stevens

La única diferencia es que realizo algunos ajustes para ajustar la posición, si depende de la longitud del texto, parece ser similar a cómo lo hace Apple.

 UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f]; titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft); titleLabel.textColor = [UIColor redColor]; titleLabel.text = self.title; self.navigationItem.titleView = titleLabel; [titleLabel release]; 

Es posible que desee ajustar el valor de 10 dependiendo del tamaño de su fuente

Me encontré con el problema con mis botones de navegación tirando el texto fuera del centro (cuando solo tienes un botón). Para arreglar eso, simplemente cambié el tamaño de mi fotogtwig así:

 CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44); 

He personalizado la imagen de fondo de la barra de navegación y el elemento del botón izquierdo, y el título gris no se ajusta al fondo. Luego uso:

 [self.navigationBar setTintColor:[UIColor darkGrayColor]]; 

para cambiar el color del tinte a gris. ¡Y el título es blanco ahora! Eso es lo que quiero.

Espero ayudar también 🙂

Se recomienda establecer self.title ya que se usa mientras se empujan las barras de navegación de los niños o se muestra el título en tabbars.

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // create and customize title view self.title = NSLocalizedString(@"My Custom Title", @""); UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; titleLabel.text = self.title; titleLabel.font = [UIFont boldSystemFontOfSize:16]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.textColor = [UIColor whiteColor]; [titleLabel sizeToFit]; self.navigationItem.titleView = titleLabel; [titleLabel release]; } } 

Este es un hilo bastante antiguo, pero creo que proporcionaría una respuesta para configurar el Color, el Tamaño y la Posición Vertical del Título de la Barra de Navegación para iOS 7 o superior.

Para Color y Tamaño

  NSDictionary *titleAttributes =@{ NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0], NSForegroundColorAttributeName : [UIColor whiteColor] }; 

Para la posición vertical

 [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault]; 

Establecer título y asignar el diccionario de atributos

 [[self navigationItem] setTitle:@"CLUBHOUSE"]; self.navigationController.navigationBar.titleTextAttributes = titleAttributes; 

Esto funciona para mí en Swift:

 navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white] 

Úselo así para el soporte de Orientación

 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)]; [view setBackgroundColor:[UIColor clearColor]]; [view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ]; UILabel *nameLabel = [[UILabel alloc] init]; [nameLabel setFrame:CGRectMake(0, 0, 320, 40)]; [nameLabel setBackgroundColor:[UIColor clearColor]]; [nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin]; [nameLabel setTextColor:[UIColor whiteColor]]; [nameLabel setFont:[UIFont boldSystemFontOfSize:17]]; [nameLabel setText:titleString]; [nameLabel setTextAlignment:UITextAlignmentCenter]; [view addSubview:nameLabel]; [nameLabel release]; self.navigationItem.titleView = view; [view release]; 

para establecer el tamaño de fuente del título, he usado las siguientes condiciones … tal vez sea útil para cualquiera

 if ([currentTitle length]>24) msize = 10.0f; else if ([currentTitle length]>16) msize = 14.0f; else if ([currentTitle length]>12) msize = 18.0f; 

Una actualización de la publicación de Alex RR utilizando los nuevos atributos de texto de iOS 7 y el moderno objective c para obtener menos ruido:

 NSShadow *titleShadow = [[NSShadow alloc] init]; titleShadow.shadowColor = [UIColor blackColor]; titleShadow.shadowOffset = CGSizeMake(-1, 0); NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor], NSShadowAttributeName:titleShadow}; [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes]; 

Esta es una de esas cosas que faltan. Su mejor opción es crear su propia barra de navegación personalizada, agregar un cuadro de texto y manipular el color de esa manera.

Después de encontrar el mismo problema (como los demás) de la etiqueta que se mueve cuando insertamos un botón en la barra de navegación (en mi caso tengo una ruleta que reemplazo con un botón cuando se carga la fecha), las soluciones anteriores no funcionaron para mí, así que esto es lo que funcionó y mantuvo la etiqueta en el mismo lugar todo el tiempo:

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // this will appear as the title in the navigation bar //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44); CGRect frame = CGRectMake(0, 0, 180, 44); UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = UITextAlignmentCenter; label.textColor = [UIColor yellowColor]; self.navigationItem.titleView = label; label.text = NSLocalizedString(@"Latest Questions", @""); [label sizeToFit]; } return self; 

Creo que la forma correcta de establecer el color de UINavigationBar es:

 NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil]; self.titleTextAttributes = attributes; 

El código anterior está escrito es una subclase en UINavigationBar , obviamente funciona sin subclases también.

Debe llamar a [label sizeToFit]; después de configurar el texto para evitar extraños desplazamientos cuando la etiqueta se reposiciona automáticamente en la vista de título cuando otros botones ocupan la barra de navegación.

Puede usar este método en el archivo de delegado de aplicaciones y puede usar en cada vista

 +(UILabel *) navigationTitleLable:(NSString *)title { CGRect frame = CGRectMake(0, 0, 165, 44); UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = NAVIGATION_TITLE_LABLE_SIZE; label.shadowColor = [UIColor whiteColor]; label.numberOfLines = 2; label.lineBreakMode = UILineBreakModeTailTruncation; label.textAlignment = UITextAlignmentCenter; [label setShadowOffset:CGSizeMake(0,1)]; label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0]; //label.text = NSLocalizedString(title, @""); return label; } 

titleTextAttributes Muestra los atributos para el texto del título de la barra.

@property (nonatomic, copy) NSDictionary * titleTextAttributes Discusión Puede especificar la fuente, el color del texto, el color de sombra del texto y el sombreado de texto para el título en el diccionario de atributos de texto, utilizando las teclas de atributo de texto descritas en Referencia de NSString UIKit Additions.

Disponibilidad Disponible en iOS 5.0 y posterior. Declarado en UINavigationBar.h

Swift 4 versión:

 self.navigationController.navigationBar.titleTextAttributes = [ NSAttributedStringKey.foregroundColor: UIColor.green] 
 self.navigationItem.title=@"Extras"; [self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];