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 aUIFont
NSForegroundColorAttributeName
: Change color with aUIColor
NSShadow
: Add a drop shadow (seeNSShadow
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.