在iOS 7.0.3上发生了什么“HelveticaNeue-Italic”
刚将我的iPod touch升级到iOS 7.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 2013video“使用字体和文本工具包”,有趣的部分从12:22开始。 主讲人以OS X中的“MetaFonts”为例。 他所说的是,像下面的调用字体:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
不能保证在不同的版本或甚至不同的用途上返回相同的底层字体。 他的例子是Lucinda Grande。 他似乎没有说使用“HelveticaNeue-Italic”可以从版本到版本。
所以我在iOS 7中构build了一个实验。我用下面的代码创build了我的字体:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0]; UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic]; UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
我没有得到一个有效的UIFont为fontWithDescriptor和当我查询字体为fontName:
[fontWithDescriptor fontName]
我回来了…
HelveticaNeue-Italic
去搞清楚???
所以7.0.3的一个可能的答案似乎是上面的代码。
—-进一步调整—-
虽然上面的解决scheme是有效的,但我认为这是正确的。 我已经切换到以下解决scheme
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init]; UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"]; UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic]; textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
这似乎是做所有正确的事情。 我尝试了以前的方法与另一个字体家族,它似乎与fontName和fontFamily混淆。 希望这可以帮助!
这是一个苹果的错误。 它是在iOS 7.0.3中引入的,从iOS 7.0.4开始尚未修复。 它似乎在iOS 7.1的开发者预览中得到了修复。 这里是代码(在开发论坛中由苹果公司提供)来解决这个问题:
#import <CoreText/CoreText.h> CGFloat size = 14; UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Italic" size:size]; if (font == nil && ([UIFontDescriptor class] != nil)) { font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), size, NULL); }
另外值得一提的是,在当前版本的Xcode(5.0.1(5A2053))中,这个字体在Interface Builder的字体下拉列表中没有列出。 所以,如果你以前用这种字体configuration了一个标签,你会注意到UI是混淆的,标签在运行时被分配了一些其他的字体和大小(参见下面的UI屏幕截图)。 对于故事板/ xib中configuration的标签,您需要重置代码中的字体。
这里的参考是在开发论坛讨论的问题。
这是iOS 7.0.3中的一个错误。
如果您明确使用HelveticaNeue-Italic,则可以使用以下解决方法创build它:
UIFont* font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), fontSize, NULL);
但请注意,此解决方法仅适用于iOS 7; 它不能部署到iOS 6(因为CTFontRef
和UIFont
在iOS 6上没有免费桥接)。 但是,在iOS 6上,您可以使用常规的字体查找代码。
我相信这是一个错误。 我已经提交给苹果公司。 可悲的是,我的应用程序现在崩溃了。 该字体用于我正在使用的第三方库。 Twitter上的许多人正在报告问题。
如果您是dynamic访问斜体字体,而不是按名称访问字体[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
use [UIFont italicSystemFontOfSize:15.0f]
这对我来说工作得很好。
我目前没有find会话,但他们说了一些你不能依赖iOS7上的字体的东西。 他们甚至可以在应用程序的生命周期中进行更改。 这基本上意味着:当你在你的应用程序中指定字体的时候,你会搞砸了,使用字体描述符或首选字体!
我发现了另一个似乎工作的解决scheme。 我登出了一个电话
[[UIFont italicSystemFontOfSize:12.0] fontName]
看看正在使用的实际系统斜体字体是什么,并返回“.HelveticaNeueInterface-ItalicM3”。 一个简单的testing表明使用
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
作品! 通过可视化比较,上述调用返回的字体与原始“HelveticaNeue-Italic”字体完全相同。
这个问题几乎可以肯定是一个错误… Helvetica Neue是iOS 7中的默认字体,因此该系列中的字体不应该丢失。 在Xcode v5.0中一切正常,但升级到5.0.1后立即出现此问题。 我已经提交了一个苹果公司的错误logging。 在此之前,这个解决scheme似乎工作…
我向苹果提交的错误报告已被标记为“封闭为重复”。 我希望这意味着他们认为这是一个错误。 但是,iOS 7.0.4并不能解决这个问题。
该错误似乎已经在iOS 7.1 beta 1中得到了修复。 [UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
返回一个字体。
由于没有人在UIWebView中提到HelveticaNeue斜体支持,所以我想分享我的发现。
从7.0.6开始,UIWebView中仍然缺less常规的斜体,并且在同一个系列中似乎又回到了UltraLightItalic。 这看起来有点不可思议,因为它非常轻,所以正常重量非斜体HelveticaNeue文本旁边。
我的解决方法是使用普通的Helvetica而不是HelveticaNeue,但仅限于斜体。 所以如果你有这样的CSS:
.myCssClass { font-family:HelveticaNeue; /* etc, etc */ }
…你会添加两个其他类来覆盖<i>
和<em>
:
.myCssClass i { font-family:Helvetica; } .myCssClass em { font-family:Helvetica; }
经常Helvetica斜体字体看起来很好,我不认为任何人会注意到,这不是HelveticaNeue。
我有一个相同的崩溃,只能在iOS 7.0.3和7.0.4崩溃,并在所有其他版本完美的作品。 经过这么多的调查,我才知道@“HelveticaNeue-Italic”在iOS 7.0.3和7.0.4版本中不可用,所以我曾经在这些版本中遇到过崩溃。
我已经解决了下面的代码的问题,这可能有助于有需要的人。
self.headerFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:16.0f]; if (self.headerFont == nil) { self.headerFont = [UIFont fontWithName:@"HelveticaNeue" size:16.0f]; }
崩溃日志是:
[__NSCFConstantString pointSize]: unrecognized selector sent to instance