首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 7.0.3上的“HelveticaNeue-意大利语”发生了什么?

iOS 7.0.3上的“HelveticaNeue-意大利语”发生了什么?
EN

Stack Overflow用户
提问于 2013-10-22 20:43:57
回答 10查看 28K关注 0票数 101

刚将我的iPod触摸升级到iOS 7.0.3,“HelveticaNee-意大利语”似乎已经消失了。当我在电话中查询时:

代码语言:javascript
复制
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]

我得到以下fontNames (13):

代码语言:javascript
复制
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):

代码语言:javascript
复制
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开始。演讲者以OS中的"MetaFonts“为例。他说的是调用下的字体如下:

代码语言:javascript
复制
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize

无法保证跨版本或甚至不同用途返回相同的基础字体。他的榜样是露辛达·格兰德。他似乎并没有说使用“HelveticaNeue-意大利语”可能会从一个版本消失到另一个版本。

因此,我在iOS 7中构建了一个实验。我用以下代码创建了字体:

代码语言:javascript
复制
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];

我确实为fontWithDescriptor获得了一个有效的fontWithDescriptor返回,并且当我查询fontName的字体时:

代码语言:javascript
复制
[fontWithDescriptor fontName]

我回来了..。

代码语言:javascript
复制
HelveticaNeue-Italic

去想想?

因此,对7.0.3的一个可能的答案似乎是上面的代码。

-进一步调整

尽管上述解决方案有效,但我不认为它在形式上是正确的。我切换到了下面的解决方案

代码语言:javascript
复制
    UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];

    UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
    UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

    textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];

这似乎做了所有正确的事情。我用另一个字体系列尝试了前面的方法,它似乎与fontName和fontFamily混淆了。希望这能有所帮助!

EN

回答 10

Stack Overflow用户

发布于 2013-10-24 16:22:29

这是苹果的窃听器。它是在iOS 7.0.3中引入的,到iOS 7.0.4时还没有得到修正。在iOS 7.1的开发者预览版中,它似乎是固定的。下面是解决这个问题的代码(由Apple在dev论坛中提供):

代码语言:javascript
复制
#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中的字体下拉列表中没有将此字体作为选项列出。因此,如果您以前配置了带有此字体的标签,您会注意到ui被混淆了,标签在运行时会被分配到其他字体和大小(参见下面的ui屏幕)。对于在故事板/xib中配置的标签,您需要在代码中重置字体。

作为参考,这里是开发计划署论坛中对这个问题的讨论。

票数 31
EN

Stack Overflow用户

发布于 2013-10-31 02:21:11

这是iOS 7.0.3中的一个bug。

如果您显式地使用HelveticaNeue-意大利语,那么您可以使用以下方法创建它:

代码语言:javascript
复制
UIFont* font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), fontSize, NULL);

但是,请注意,这个解决方案只适用于iOS 7;它不能部署到iOS 6(因为CTFontRefUIFont在iOS 6上不是免费的桥接)。但是,在iOS 6上,您可以只使用常规的字体查找代码。

票数 7
EN

Stack Overflow用户

发布于 2013-10-23 15:01:20

我相信这是一只虫子。我已经向苹果公司提交了这样的文件。对我来说,不幸的是,我的应用程序正在崩溃。字体在我正在使用的第三方库中使用。推特上的许多人都在报告问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19527962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档