ios objective-c uinavigationbar uibarbuttonitem uifont

ios - Cambiar la fuente del botón de la barra de navegación trasera



objective-c uinavigationbar (7)

En Swift3:

let font = UIFont(name: "Verdana", size: 10.0) // Back button UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font!], for: UIControlState.normal) // Title in the navigation item let fontAttributes = [NSFontAttributeName: font] self.navigationController?.navigationBar.titleTextAttributes = fontAttributes

Nota: solo tiene que hacer esto una vez para el controlador de navegación.

Quiero poder configurar la fuente de mi barra de navegación de aplicaciones sin hacer nada demasiado loco y sin perder ninguna otra característica de diseño del botón (es decir, quiero mantener la flecha).

Ahora mismo uso esto en viewDidAppear: para establecer la fuente de los elementos normales del botón de la barra.

for (NSObject *view in self.navigationController.navigationBar.subviews) { if ([view isKindOfClass:[UIButton class]]) { [((UIButton*)view).titleLabel setFont:[UIFont fontWithName:@"Gill Sans" size:14.0]]; } }

Sin embargo, esto no modifica el botón Atrás, independientemente de a qué UIViewController se aplique este código (raíz, actual, etc.).


Para cambiar la apariencia del texto en todos los UIBarButtonItems aparecen en todos UINavigationBars , haga lo siguiente en la application:didFinishLaunchingWithOptions:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes: @{UITextAttributeTextColor:[UIColor blackColor], UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowColor:[UIColor whiteColor], UITextAttributeFont:[UIFont boldSystemFontOfSize:12.0] } forState:UIControlStateNormal];

ACTUALIZACIÓN: versión amigable iOS7

NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowOffset = CGSizeMake(0.0, 1.0); shadow.shadowColor = [UIColor whiteColor]; [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes: @{NSForegroundColorAttributeName:[UIColor blackColor], NSShadowAttributeName:shadow, NSFontAttributeName:[UIFont boldSystemFontOfSize:12.0] } forState:UIControlStateNormal];

Rápido:

NOTA: esto cambia TODAS las instancias de UIBarButtonItem , no solo las contenidas dentro de un UINavigationBar

UIBarButtonItem.appearance() .setTitleTextAttributes([NSFontAttributeName : ExamplesDefaults.fontWithSize(22)], forState: UIControlState.Normal)

Swift3: UIBarButtonItem.appearance (). SetTitleTextAttributes ([NSFontAttributeName: UIFont (nombre: "FontName-Regular", tamaño: 14.0)!], Para: .normal)


Para cualquiera que no haya conseguido que esto funcione, así es como lo hice, incluso volví a Root ViewController en IOS7:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:self action:@selector(popToRoot:)]; backBtn.title = @"Back"; [backBtn setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Chalkduster" size:15], NSFontAttributeName, [UIColor yellowColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal]; self.navigationItem.leftBarButtonItem=backBtn;

popToRoot ViewController:

- (IBAction)popToRoot:(UIBarButtonItem*)sender { [self.navigationController popToRootViewControllerAnimated:YES]; }

Tal vez alguien pueda tener uso de esto.


Si está utilizando el nuevo UISplitViewControllerDelegate para vistas divididas en iOS 8, los métodos anteriores no funcionarán porque el nuevo displayModeButtonItem funciona de manera un poco diferente.

displayModeButtonItem configurar la fuente cuando esté creando displayModeButtonItem . Asumiendo que estás siguiendo las plantillas de Apple, esto es probablemente en prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender donde harías algo como esto:

// From Apple''s Template: NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath]; DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController]; [controller setDetailItem:object]; controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; controller.navigationItem.leftItemsSupplementBackButton = YES; // New Line to set the font: [controller.navigationItem.leftBarButtonItem setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];


Use esto en su lugar en su AppDelegate o donde se inicializa NavigationController, método disponible en iOS 5 y superior

UIBarButtonItem *backbutton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:nil action:nil]; [backbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor],UITextAttributeTextColor,[UIFont fontWithName:TEXTFONT size:16.0f],UITextAttributeFont, nil] forState:UIControlStateNormal];


Versión rápida de todo lo mencionado anteriormente (extracto de la .com/a/28347428/469614 ):

let customFont = UIFont(name: "customFontName", size: 17.0)! UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], forState: .normal)

Más golosinas:
.com/a/28347428/469614


Swift 3.0+

AppDelegate.swift

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "myFont", size: 17.0)!], for: .normal)