Change font of back navigation bar button
To change the appearance of the text in all UIBarButtonItems
appearing in all UINavigationBars
, do the following in 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];
UPDATE: iOS7 friendly version
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];
Swift:
NOTE: this changes ALL instances of UIBarButtonItem
, not just those contained within a UINavigationBar
UIBarButtonItem.appearance() .setTitleTextAttributes([NSFontAttributeName : ExamplesDefaults.fontWithSize(22)], forState: UIControlState.Normal)
Swift3:
UIBarButtonItem.appearance() .setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FontName-Regular", size: 14.0)!], for: .normal)
For anyone that did not fully got this to work, here is how i did it, including popped back to the Root ViewController in 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];}
Maybe someone may have use of this.
Swift version of the all mentioned above (excerpt from the original answer) :
let customFont = UIFont(name: "customFontName", size: 17.0)!UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], forState: .normal)
More goodies:
https://stackoverflow.com/a/28347428/469614