Change the navigation bar's font

51,745

Solution 1

From iOS 7 and later:

NSShadow* shadow = [NSShadow new];
shadow.shadowOffset = CGSizeMake(0.0f, 1.0f);
shadow.shadowColor = [UIColor redColor];
[[UINavigationBar appearance] setTitleTextAttributes: @{
     NSForegroundColorAttributeName: [UIColor greenColor],
                NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:20.0f],
              NSShadowAttributeName: shadow
                                                      }];

From iOS 5 and later:

 [[UINavigationBar appearance] setTitleTextAttributes: @{
                                UITextAttributeTextColor: [UIColor greenColor],
                          UITextAttributeTextShadowColor: [UIColor redColor],
                         UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)],
                                     UITextAttributeFont: [UIFont fontWithName:@"Helvetica" size:20.0f]
     }];

Earlier than iOS 5:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 400, 44)];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:20.0];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = UITextAlignmentCenter;
label.textColor =[UIColor whiteColor];
label.text=self.title;  
self.navigationItem.titleView = label;      
[label release];

Solution 2

If you wanted to change the font in the Interface Builder itself (without any code) here is the way to do it in Xcode6:

1.) Find the Navigation Bar view under the Navigation Controller Scene enter image description here

2.) Change the Title Font, Color and Shadow attributes in the Attributes Inspector. enter image description here

Solution 3

The above answer works. I would add the following line before the last line. If I don't, it seems the label is center-aligned incorrectly if there is a back button on the left side but no right button.

...
[self.navigationItem.titleView sizeToFit]; 
[label release]; // not needed if you are using ARC

Solution 4

Updated for iOS 7:

[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                      [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
                                                      shadow, NSShadowAttributeName,
                                                      [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:21.0], NSFontAttributeName, nil]];

courtesy of:

http://www.appcoda.com/customize-navigation-status-bar-ios-7/

Solution 5

Not sure why all the answers included the shadow. Adding the lines that manipulate the shadow does nothing in respect to changing text font. These 2 lines of code will work for iOS 8.4 and Swift

let attributesDictionary = [NSFontAttributeName: UIFont(name: "Helvetica Neue", size: 14)!]
navigationController!.navigationBar.titleTextAttributes = attributesDictionary

The titleTextAttributes stores a dictionary that will dictate the font, color, size, and other attributes of the navigation bar's title.

Share:
51,745
Joetjah
Author by

Joetjah

SOreadytohelp #SOreadytohelp

Updated on August 22, 2020

Comments

  • Joetjah
    Joetjah over 3 years

    The question is plain easy and simple, the answer unfortunately not.

    How can you change the font of the text in the UINavigationBar?

  • Philip007
    Philip007 over 11 years
    Kindly remind this answer is obsolete. There are simple ways to customize appearance of UI elements in iOS 5 and 6. Just use appearance proxy.
  • Vin
    Vin about 10 years
    I have downloaded the font named timeburner_regular.ttf so I wrote the above code. It worked for me.
  • NRitH
    NRitH over 8 years
    And the default color of the text will be whatever the UINavigationBar's tintColor is. If you want something different, set the tint color, or add an NSForegroundColorAttributeName attribute and value to that attributes dictionary.
  • Brabbeldas
    Brabbeldas over 8 years
    How to let this use the SystemFont?
  • Brabbeldas
    Brabbeldas over 8 years
    How to let this code use the SystemFont instead of hardcoding to Helvetica?
  • Septronic
    Septronic over 8 years
    Beautifully worked! (@Brabbeldas I did change it to another font though :P)