Change font of back navigation bar button Change font of back navigation bar button ios ios

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