Change the font of a UIBarButtonItem Change the font of a UIBarButtonItem ios ios

Change the font of a UIBarButtonItem


To be precise, this can be done as below

[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:     [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,    [UIColor greenColor], NSForegroundColorAttributeName,    nil]                           forState:UIControlStateNormal];

Or with object literal syntax:

[buttonItem setTitleTextAttributes:@{     NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],     NSForegroundColorAttributeName: [UIColor greenColor]} forState:UIControlStateNormal];

For convenience, here's the Swift implementation:

buttonItem.setTitleTextAttributes([        NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,        NSAttributedStringKey.foregroundColor: UIColor.green],    for: .normal)


For those interested in using UIAppearance to style their UIBarButtonItem's fonts throughout the app, it can be accomplished using this line of code:

Objective C:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0], NSForegroundColorAttributeName: [UIColor whiteColor]};[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];

Swift 2.3:

UIBarButtonItem.appearance().setTitleTextAttributes([    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,    NSForegroundColorAttributeName : UIColor.white],for: .normal)

Swift 3

UIBarButtonItem.appearance().setTitleTextAttributes([    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,    NSForegroundColorAttributeName : UIColor.white,], for: .normal)

Swift 4

UIBarButtonItem.appearance().setTitleTextAttributes([    NSAttributedStringKey.font : UIFont(name: "HelveticaNeue-Light", size: 12)!,    NSAttributedStringKey.foregroundColor : UIColor.white,], for: .normal)

Or for a single UIBarButtonItem (not for all app wide), if you have a custom font for one button in particular:

Swift 3

let barButtonItem = UIBarButton()barButtonItem.setTitleTextAttributes([    NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!,    NSForegroundColorAttributeName : UIColor.white,], for: .normal)barButtonItem.title = "\u{f02a}"

Swift 4

let barButtonItem = UIBarButton()barButtonItem.setTitleTextAttributes([    NSAttributedStringKey.font : UIFont(name: "FontAwesome", size: 26)!,    NSAttributedStringKey.foregroundColor : UIColor.white,], for: .normal)barButtonItem.title = "\u{f02a}"

Of course, you can change the font & size to whatever you'd like. I prefer to put this code in the AppDelegate.m file in the didFinishLaunchingWithOptions section.

Available attributes (just add them to the NSDictionary):

  • NSFontAttributeName: Change font with a UIFont
  • NSForegroundColorAttributeName: Change color with a UIColor
  • NSShadow: Add a drop shadow (see NSShadow class reference)

(Updated for iOS7+)


Because UIBarButtonItem inherits from UIBarItem, you can try

- (void)setTitleTextAttributes:(NSDictionary *)attributes                  forState:(UIControlState)state

but this is for iOS5 only. For iOS 3/4, you will have to use a custom view.