Just upgraded my iPod touch to iOS 7.0.3 and "HelveticaNeue-Italic" seems to have disappeared. When I query on the phone with:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
I get the following fontNames (13):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-ThinItalic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
When I do the same query running in the simulator I get (14):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
**HelveticaNeue-Italic,**
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-Thin_Italic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Anyone else see this?
---- New Information ----
I went back to the WWDC 2013 video "Using Font with Text Kit" and the interesting part starts at 12:22. The presenter talks about "MetaFonts" in OS X as an example. What he says is that the font under calls like:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
are not guaranteed to return the same underlying font across versions or even different uses. His example was Lucinda Grande. He did not seem to be saying that using "HelveticaNeue-Italic" could go away from version to version.
So I constructed an experiment in iOS 7. I created my font with the following code:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
I did get a valid UIFont back for fontWithDescriptor and when I queried the font for the fontName with:
[fontWithDescriptor fontName]
I got back...
HelveticaNeue-Italic
Go figure???
So a possible answer to 7.0.3 seems to be the code above.
---- Further Tweak ----
Although the solution worked above, I don't think it is formally correct. I have switched to the following solution
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
This appears to do all the right things. I tried the previous approach with another font family and it seemed to get confused with a the fontName and the fontFamily. Hope this helps!
See Question&Answers more detail:os