color bar ios uikit uibarbuttonitem ios7 uiappearance

bar - titleTextAttributes fuente UIAppearance en iOS 7



uinavigationitem title color (7)

Estoy usando UIAppearance para aplicar fuentes a UINavigationBar y UIBarButtonItem y tengo problemas. Ejecuté este código:

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTitleTextAttributes: @{NSFontAttributeName : [UIFont fontWithName:@"My_Font" size:17.0]} forState:UIControlStateNormal]; NSLog(@"%@", [[UIBarButtonItem appearanceWhenContainedIn: [UIToolbar class], nil] titleTextAttributesForState:UIControlStateNormal]);

y el resultado de ese registro en iOS 7 es:

(null)

Donde el resultado en iOS 6 es:

{ NSFont = "<UICFFont: 0x1d897a80> font-family: /"My_Font/"; font-weight: normal; font-style: normal; font-size: 17px"; }

No puedo encontrar nada en los documentos de iOS 7 que indique que esto no debería funcionar, ¿alguien más ha tenido este problema?

Editar 1

De hecho, he conseguido esto para trabajar con [UINavigationBar appearance] el problema fue que estaba configurando el tamaño de punto en 0 para que la fuente se establezca en el tamaño de barra de navegación / barButton predeterminado como se describe en la Referencia de NSString UIKit Additions pero aparentemente ya no funciona en iOS 7. En cambio, establecer el tamaño del punto en 0 devolverá la fuente del sistema.

Todavía no titleTextAttributes configurar titleTextAttributes para

[UIBarButtonItem appearanceWhenContaintedIn:[UIToolbar class], nil]]


Aquí es cómo cambiar globalmente el color del texto del título de la barra de navegación en Swift 4:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.yellow]


Aquí está en Swift:

let font = UIFont(name: "My_Font", size: 17.0) UINavigationBar.appearance().titleTextAttributes = [ NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: font! ]

* Tenga en cuenta que debe desenvolver el UIFont opcional.


Esto es lo que hago en iOS-7

UIColor *red = [UIColor colorWithRed:165.0f/255.0f green:1.0f/255.0f blue:0.0f/255.0f alpha:1.0]; UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:24.0f]; NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1]; [navBarTextAttributes setObject:font forKey:NSFontAttributeName]; [navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ]; self.navBar.titleTextAttributes = navBarTextAttributes;


Esto funcionó bien para iOS 7 cuando lo moví a un método viewDidLoad en mi controlador de vista.

[[UIBarButtonItem appearance] setTitleTextAttributes:attributes];

Cuando traté de hacer esto en AppDelegate, no funcionó, aunque [[UINavigationBar appearance] setTitleTextAttributes:setTitleTextAttributes:attributes]; funcionó bien en AppDelegate. También debe ir antes de crear y asignar el botón de la barra.

También funciona desde el método initWithCoder si creas el botón de tu barra en Storyboard.

Actualización: si cambia el destino de implementación a 7.0, Xcode le proporcionará advertencias que dicen que, por ejemplo, UITextAttributeTextColor está en desuso y debe usar NSForegroundColorAttributeName o en lugar de UITextAttributeFont, use NSFontAttributeName. Después de cambiar las constantes de atributo, puede llamar a setTitleTextAttributes: desde AppDelegate.


Para UIBarButons usa el proxy de apariencia :

NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica Neue" size:fontSize], UITextAttributeFont, nil]; [[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes forState:UIControlStateNormal];

Si desea limitar qué UIBarButtonItems afecta su estilo, use appearanceWhenContainedIn: en su lugar.

Para UINavigationBar, puede crear un UILabel y configurarlo en su navigationItem.titleView:

UIabel *title = [[UILabel alloc] initWithFrame:CGRectZero]; title.backgroundColor = [UIColor clearColor]; title.font = [*yourfont*]; title.textColor = [*your color*]; self.navigationItem.titleView = title;


Siguiendo la respuesta de @Alex Zavatone, podría hacerse bien en una sola línea de código:

self.navBar.titleTextAttributes = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0], NSForegroundColorAttributeName: [UIColor redColor] };


NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName, [UIColor whiteColor], NSForegroundColorAttributeName, nil]; [[UINavigationBar appearance] setTitleTextAttributes:attributes];

La clave es usar NSFontAttributeName y así sucesivamente. Supongo que se están moviendo hacia el uso de la variedad NS para la compatibilidad de 64 bits. El código anterior funcionó en mi dispositivo iOS7.