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)