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.