2014-09-20 38 views
8

我有一个自定义字体包含在我的项目中,直到我将我的Xcode升级到版本6并以iOS 8作为基础SDK时,它才工作得很好。现在,如果我在iOS 8模拟器或设备上运行应用程序,自定义字体不再有效,但它仍然可以在我的iOS 7设备上运行。有什么建议么?自定义字体不适用于iOS 8

+0

如何进行进入Info.plist的样子。该文件位于您的应用程序中的位置?你如何访问字体? – idmean 2014-09-20 15:41:34

+0

我知道,至少在Xcode5中,如果您在文件名中使用大写字母而不是大写字母,但在设备上它确实很重要。也许他们也改变了Xcode6的这个规则。 – bdv 2014-09-20 19:34:42

+0

@bdv是的,我记得很久以前,当处理模拟器和设备中显示/未显示的一些图像时。至于这个字体的东西,我检查过,它都是小写字母,并且匹配磁盘上的文件名。 – CodePlumber 2014-09-20 20:49:40

回答

1

我发现了“缺失”字体的原因。实际上字体仍然存在,但是从iOS 7到iOS 8,字体名称有一个微妙但突然的变化:在iOS 7中,它被调用,例如, “Custom_Font-Style”,但现在在iOS 8中被称为“Custom-Font-Style”。注意Custom和Font之间的下划线现在变成短划线。幸运的是字体系列名称保持不变,为“定制字体家庭”,所以现在而不是硬编码的字体名称我不得不从字体系列中提取出来,像这样:

static NSString *_myCustomFontName; 

+ (NSString *)myCustomFontName 
{ 
    if (!_myCustomFontName) 
    { 
     NSArray *arr = [UIFont fontNamesForFamilyName:@"Custom Font Family"]; 
     // I know I only have one font in this family 
     if ([arr count] > 0) 
      _myCustomFontName = arr[0];   
    } 

    return _myCustomFontName; 
} 

我不知道字体文件如何显示其信息,但现在我想我的字体文件(自定义字体.ttf)只提供字体系列名称“自定义字体系列”,并且iOS从特定规则中获取其字体名称,出于某种原因从iOS 7到iOS 8,所以在使用Custom_Font-Style之前,现在我们有Custom-Font-Style。

0

如前所述,iOS 8和以前版本的字体名称读取方式不同。我不得不在把支票来决定使用哪个名称:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
    OS_SPECIFIC_GOTHIC_FONT = @"New"; 
} else { 
    OS_SPECIFIC_GOTHIC_FONT = @"Highway Gothic"; 
} 

您可以使用搜索,获取信息和字体册找到不同的名称(iOS 8的使用,而其余的字体册标题在获取信息中使用全名)

20

在我的情况下,另一个解决方案工作。当我将字体添加到项目中时,它们不会自动添加到已编译的束包资源中。所以我必须去'目标' - >'建立阶段' - >'复制捆绑资源'并手动添加所有字体。这奏效了

+0

真棒..为我工作.. +1 – 2016-03-15 05:35:58

0

拉尔斯·布隆伯格答案Swift 3

for family in UIFont.familyNames { 
     print("\(family)") 
     for name: String in UIFont.fontNames(forFamilyName: family) { 
      print("== \(name)") 
     } 
    } 
相关问题