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]]
Following @Alex Zavatone's answer - it could be done nicely in just one line of code:
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.
Here it is in Swift:
*Note that you have to unwrap the optional UIFont.
For the UIBarButons use the appearance proxy:
If you want to limit which UIBarButtonItems your style affects use appearanceWhenContainedIn: instead.
For the UINavigationBar, you can create a UILabel and set it to your navigationItem.titleView:
Here is how to globally change the nav bar title's text color in Swift 4:
Here's what I do on iOS-7