Change font of UINavigationController title Change font of UINavigationController title ios ios

Change font of UINavigationController title


As of iOS 5 you can change the font via the appearance proxy.

https://developer.apple.com/documentation/uikit/uiappearance

The following will set the title font for all UINavigationControllers.

  NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]];  [titleBarAttributes setValue:[UIFont fontWithName:@"Didot" size:16] forKey:NSFontAttributeName];  [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes];

To set the font for the back button, do this:

  NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary: [[UIBarButtonItem appearance] titleTextAttributesForState:UIControlStateNormal]];  [attributes setValue:[UIFont fontWithName:@"Didot" size:12] forKey:NSFontAttributeName];  [[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal];

To set the font for the large titles available in iOS 11+, do this:

if (@available(iOS 11.0, *)) {    NSMutableDictionary *largeTitleTextAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] largeTitleTextAttributes]];    [largeTitleTextAttributes setValue:[UIFont fontWithName:@"Didot" size:32] forKey:NSFontAttributeName];    [[UINavigationBar appearance] setLargeTitleTextAttributes:largeTitleTextAttributes];}


for iOS8+ you can use:

[self.navigationController.navigationBar setTitleTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:18.0f],                                                                   NSForegroundColorAttributeName: [UIColor whiteColor]                                                                   }];

Swift:

self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "MyFont", size: 18.0)!]


The title view can be any view. So just create a UILabel or something else where you change the font and assign that new view to the title property of the navigation item.