刚刚把我的 iPod touch 升级到 iOS7.0.3,“ HelveticaNeue-Italic”似乎消失了。当我打电话询问:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
我得到以下 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
当我在模拟器中运行相同的查询时,我得到(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
有人看到这个吗?
——新信息——
我回到 WWDC 2013视频“使用字体与文本工具包”,有趣的部分在12:22开始。演讲者以 OSX 中的“ MetaFonts”为例。他说的是调用下面的字体是这样的:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
不能保证在不同版本甚至不同用法中返回相同的底层字体。他的榜样是 Lucinda Grande。他似乎并没有说使用“ HelveticaNeue-斜体”可以从一个版本到另一个版本。
所以我在 iOS7中做了一个实验,我用下面的代码创建了我的字体:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
我的确为 fontWithDescriptor 获得了一个有效的 UIFont,当我用以下方法查询 fontName 的字体时:
[fontWithDescriptor fontName]
我回来了。
HelveticaNeue-Italic
你猜怎么着?
因此,7.0.3的一个可能的答案似乎就是上面的代码。
——进一步调整——
虽然上面的解决方案起作用了,但我不认为它在形式上是正确的
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
这看起来做了所有正确的事情。我用另一个字体家族尝试了前面的方法,但它似乎与 fontName 和 fontFamily 混淆了。希望这个能帮上忙!