Reputation: 1310
I have an UINavigationBar added to my UIViewController view. I want to change the fonts properties. Note that I want to change a UINavigationBar not controller. In my app where I use UINavigationController I use self.navigationItem.titleView = label;
to display the custom label.
How can I accomplish to have a custom title in my UINavigationBar?
P.S I use this to set the title text self.navBar.topItem.title = @"Information";
of my UINavigationBar.
Upvotes: 43
Views: 42114
Reputation: 7061
For iOS 13 and Swift 5.
For setting the title color & font just add in viewDidLoad() the following line:
UINavigationBar.appearance().titleTextAttributes = [
.foregroundColor: UIColor.white,
.font: UIFont(name: "Arial", size: 24)! ]
For setting the bar button item text color & font:
UIBarButtonItem.appearance().setTitleTextAttributes([
.foregroundColor: UIColor.white,
.font: UIFont(name: GetFontNameBold(), size: 40)! ],
for: UIControl.State.normal)
Upvotes: 0
Reputation: 3401
In iOS8 swift, use the following code to set font:
var navigationBarAppearance = UINavigationBar.appearance()
let font = UIFont(name: "Open Sans", size: 17)
if let font = font {
navigationBarAppearance.titleTextAttributes = [NSFontAttributeName: font, NSForegroundColorAttributeName: UIColor.whiteColor()]
}
Upvotes: 5
Reputation: 1094
From iOS 5 onwards we have to set title text color and font of navigation bar using titleTextAttribute Dictionary(predefined dictionary in UInavigation controller class reference).
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], NSForegroundColorAttributeName,
[UIFont fontWithName:@"ArialMT" size:16.0], NSFontAttributeName,nil]];
The below tutorial is the best tutorial for customization of UIElements like UInavigation bar, UIsegmented control, UITabBar. This may be helpful to you
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
Upvotes: 91
Reputation: 3223
link below will help you. It depends on where would you like to set font properties on current viewController's navigation bar all anywhere in application
you can find nice tutorial here% http://www.appcoda.com/customize-navigation-status-bar-ios-7/?utm_campaign=iOS_Dev_Weekly_Issue_118&utm_medium=email&utm_source=iOS%2BDev%2BWeekly
The basic idea is to create NSDictionary instance and fill it with your desired font and other properties. I finished with this solution:
in your -viewDidLoad controller method after [super viewDidLoad] put this lines:
UIColor *color = [UIColor redColor];
NSShadow *shadow = [NSShadow new];
UIFont *font = [UIFont fontWithName:@"EnterYourFontName" size:20.0]
shadow.shadowColor = [UIColor greenColor];
shadow.shadowBlurRadius = 2;
shadow.shadowOffset = CGSizeMake(1.0f, 1.0f);
//fill this dictionary with text attributes
NSMutableDictionary *topBarTextAttributes = [NSMutableDictionary new];
//ios 7
topBarTextAttributes[NSForegroundColorAttributeName] = color;
//ios 6
topBarTextAttributes[UITextAttributeTextColor] = color;
//ios 6
topBarTextAttributes[UITextAttributeTextShadowOffset] = [NSValue valueWithCGSize:shadow.shadowOffset];
topBarTextAttributes[UITextAttributeTextShadowColor] = shadow.shadowColor;
//ios 7
topBarTextAttributes[NSShadowAttributeName] = shadow;
//ios 6
topBarTextAttributes[UITextAttributeFont] = font;
//ios 7
topBarTextAttributes[NSFontAttributeName] = font;
//for all the controllers uncomment this line
// [[UINavigationBar appearance]setTitleTextAttributes:topBarTextAttributes];
//for current controller uncoment this line
// self.navigationController.navigationBar.titleTextAttributes = topBarTextAttributes;
Upvotes: 2
Reputation: 1827
Don't forget to add the font to your target.
I did everything that can be done about a font and I couldn't load it, when , in fact the font wasn't a member of my target.
So check Target Membership as well on the custom font added.
Upvotes: 0
Reputation: 65369
(This is not possible using the new iOS 5.0 Appearance API).
Edit:
iOS >= 5.0 :
Set the Title Text Attributes for the Navigationbar:
// Customize the title text for *all* UINavigationBars
NSDictionary *settings = @{
UITextAttributeFont : [UIFont fontWithName:@"YOURFONTNAME" size:20.0],
UITextAttributeTextColor : [UIColor whiteColor],
UITextAttributeTextShadowColor : [UIColor clearColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]};
[[UINavigationBar appearance] setTitleTextAttributes:settings];
iOS < 5.0
UINavigationItem doesn't have a property called label or something, only a titleView. You are only able to set the font by setting a custom label as this title view You could use the following code: (as suggested here)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];
label.font = [UIFont fontWithName:@"YOURFONTNAME" size:20.0];
label.shadowColor = [UIColor clearColor];
label.textColor =[UIColor whiteColor];
label.text = self.title;
self.navigationItem.titleView = label;
[label release];
Upvotes: 22
Reputation: 231
Just put this in your app delegate's
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
From Ray Wenderlich:
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"STHeitiSC-Light" size:0.0],
UITextAttributeFont, nil]];
Upvotes: 7