Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

titleTextAttributes UIAppearance font in iOS 7

I am using UIAppearance to apply fonts to UINavigationBar and UIBarButtonItem and I am having problems. I ran this code:

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil]  setTitleTextAttributes: @{NSFontAttributeName : [UIFont fontWithName:@"My_Font" size:17.0]}  forState:UIControlStateNormal];  NSLog(@"%@", [[UIBarButtonItem appearanceWhenContainedIn: [UIToolbar class], nil] titleTextAttributesForState:UIControlStateNormal]); 

and the result of that log on iOS 7 is:

(null) 

Where the result in iOS 6 is:

{     NSFont = "<UICFFont: 0x1d897a80> font-family: \"My_Font\"; font-weight: normal; font-style: normal; font-size: 17px"; } 

I can't find anything in the iOS 7 docs that would indicate that this shouldn't work, has anyone else had this problem?

Edit 1

I actually have gotten this to work with [UINavigationBar appearance] the problem was that I was setting the point size to 0 in order to have the font be set to the default navbar/barButtonItem size as described in the NSString UIKit Additions Reference but this apparently no longer works in iOS 7. Instead, setting the point size to 0 will return the system font.

I am still unable to set titleTextAttributes to

[UIBarButtonItem appearanceWhenContaintedIn:[UIToolbar class], nil]]

like image 792
LOP_Luke Avatar asked Sep 19 '13 15:09

LOP_Luke


2 Answers

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont      fontWithName:@"YOURFONT" size:14], NSFontAttributeName,      [UIColor whiteColor], NSForegroundColorAttributeName, nil];  [[UINavigationBar appearance] setTitleTextAttributes:attributes]; 

The key is to use NSFontAttributeName and so forth. I assume they are moving over to using the NS variety for 64-bit compatibility. The above code worked on my iOS7 device.

like image 82
TMilligan Avatar answered Oct 02 '22 22:10

TMilligan


Following @Alex Zavatone's answer - it could be done nicely in just one line of code:

self.navBar.titleTextAttributes = @{     NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0],      NSForegroundColorAttributeName: [UIColor redColor] }; 
like image 33
Sergey Grischyov Avatar answered Oct 02 '22 21:10

Sergey Grischyov