ios5 uinavigationbar uiappearance

¿Cómo establecer la fuente y el color del título en UINavigationBar usando API de apariencia iOS5?



uiappearance (7)

Tengo un controlador de vista múltiple y quiero establecer el color de fuente de todos en rojo.

[[UINavigationBar appearance] setFont:[UIFont boldSystemFontOfSize:12.0]];

está arrojando un error de selector no reconocido.

por favor, proporcione un código para ayudar a solucionar lo siguiente.


De Ray Wenderlich:

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

// Customize the title text for *all* UINavigationBars [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0], UITextAttributeTextColor, [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset, [UIFont fontWithName:@"Arial-Bold" size:0.0], UITextAttributeFont, nil]];

O si lo prefiere con el estilo literal del objeto:

[[UINavigationBar appearance] setTitleTextAttributes:@{ UITextAttributeTextColor: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0], UITextAttributeTextShadowColor: [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeFont: [UIFont fontWithName:@"Arial-Bold" size:0.0], }];

Editar para iOS 7 y siguientes

UITextAttributes están desaprobados como iOS 7, puede usar lo siguiente:

NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor colorWithWhite:.0f alpha:1.f]; shadow.shadowOffset = CGSizeMake(0, -1); [[UINavigationBar appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName: [UIColor whiteColor], NSShadowAttributeName: shadow, NSFontAttributeName: [UIFont fontWithName:@"Arial-Bold" size:15.0f] }];


Esto podría usarse para establecer una vista personalizada en una sola barra de navegación en lugar de una configuración global

- (void)updateTitleWithString:(NSString *)title { UIView *headerView = [[UIView alloc] initWithFrame:CGRectZero]; [headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [headerView setAutoresizesSubviews:YES]; CGFloat headFontSize = (IS_SYSTEM_DEVICE_IPAD ? 25.0f : 19.0f); UIFont *headFont = [UIFont boldSystemFontOfSize: headFontSize ]; NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; [style setLineBreakMode:NSLineBreakByTruncatingTail]; CGSize size = [title boundingRectWithSize:CGSizeMake(190,headFontSize + 6) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : headFont, NSParagraphStyleAttributeName : style} context:nil].size; headerView.frame = CGRectMake(0, 0,size.width,self.navigationController.navigationBar.frame.size.height); float labelHeight = headFontSize + 6; float labelYLoc = ( self.navigationController.navigationBar.frame.size.height - labelHeight ) / 2; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,labelYLoc, size.width,labelHeight)]; label.backgroundColor = [UIColor clearColor]; label.adjustsFontSizeToFitWidth = YES; label.textAlignment = NSTextAlignmentCenter; label.textColor = [UIColor whiteColor]; label.font = headFont; label.text = title; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.4]; label.lineBreakMode = NSLineBreakByTruncatingTail; label.shadowOffset = CGSizeMake(0,-1); label.accessibilityLabel = @"<LABEL>"; [headerView addSubview:label]; self.navigationItem.titleView = headerView; }


Haciendo esto en iOS 8+ y en Swift. No hay un setTitleTextAttributes para el objeto de apariencia. En cambio, haz esto:

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : AppTheme.fontWithSize(18)]


Hice esto agregando solo algunas líneas de código en la clase AppDelegate.m didFinishLaunchingWithOptions method: Use this code:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:255.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0],UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil]; [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

esto funciona para mi...


Para destinos de despliegue mayores o iguales a iOS 6, debe usar NSShadow en NSShadow lugar:

NSShadow * shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor lightGrayColor]; shadow.shadowOffset = CGSizeMake(0, -2); NSDictionary * navBarTitleTextAttributes = @{ NSForegroundColorAttributeName : [UIColor redColor], NSShadowAttributeName : shadow, NSFontAttributeName : [UIFont systemFontOfSize:14] }; [[UINavigationBar appearance] setTitleTextAttributes:navBarTitleTextAttributes];


Si necesita hacer esto en Swift, puede crear una extensión para UINavigationBar para permitirle obtener o establecer estas configuraciones.

extension UINavigationBar { var titleColor: UIColor? { get { if let attributes = self.titleTextAttributes { return attributes[NSForegroundColorAttributeName] as? UIColor } return nil } set { if let value = newValue { self.titleTextAttributes = [NSForegroundColorAttributeName: value] } } } var titleFont: UIFont? { get { if let attributes = self.titleTextAttributes { return attributes[NSFontAttributeName] as? UIFont } return nil } set { if let value = newValue { self.titleTextAttributes = [NSFontAttributeName: value] } } } }

A continuación, puede configurar el color y la fuente de esta manera:

navigationBar.titleColor = UIColor.redColor() navigationBar.titleFont = UIFont.systemFontOfSize(12)


Use esta línea de código

UILabel *badge_Label=[[UILabel alloc]initWithFrame:CGRectMake(5,3, 15, 15)]; badge_Label.backgroundColor=[UIColor redcolor]; badge_Label.font=[UIFont systemFontOfSize:12]; [badge_Label setText:@"20"]; [self.navigationController.navigationBar addSubview:badgelabel];

Creo que esto será útil para ti.