自定义字体在iOS上无法正确显示

Mal*_*Box 8 iphone fonts objective-c

我正在尝试在iPhone上运行一组Neo Sans Pro字体.我有四个权重:轻,正常,中,大胆的OTF文件(NeoSansPro-Light.otf,-Regular.otf等).这些文件包含在构建中,并在info.plist中注册.

调用[UIFont fontNamesForFamilyName:@"Neo Sans Pro"]返回一个包含4个条目的数组,例如"NeoSansPro-Light".

我可以使用检索每个字符串的字体对象UIFont fontWithName:size:.

但是,当我用它们绘制文本时,Light,Regular和Medium版本都绘制完全相同,看起来像Light版本.大胆的版本有所不同.

根据Font Book,每个字体文件都包含不同的字形.

我完全被难住 - 任何线索我需要做什么?

[已添加]更多调查:

 NSArray *fonts = [UIFont fontNamesForFamilyName:@"Neo Sans Pro"];

    for (NSString *fname in fonts) {
        UIFont *font = [UIFont fontWithName:fname size:12.0];
        NSLog(@"name: %@ font: %@", fname, font);
    }
Run Code Online (Sandbox Code Playgroud)

运行此代码会提供以下日志输出:

 name: NeoSansPro-Light font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
 name: NeoSansPro-Regular font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
 name: NeoSansPro-Medium font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
 name: NeoSansPro-Bold font: <UICFFont: 0xaa06070> font-family: "Neo Sans Pro"; font-weight: bold; font-style: normal; font-size: 12px
Run Code Online (Sandbox Code Playgroud)

所以显示相同的三种字体确实是相同的.但是构建中有四种字体权重和四种字体.

Mal*_*Box 10

看起来像这里的问题一样:在iPad应用程序中包含同一系列的多个字体

如果同一字体系列中有多种字体,iOS字体架构似乎会混淆,并且不会回传正确的字体.解决方案是手动编辑字体系列信息(使用Font Forge等不同的值.

例如,对于Neo Sans Pro Light字体,将字体系列(在PSNames和TTF名称中)设置为"NSP Light".同样适用于Neo Sans Pro Regular - > NSP Regular等.

然后,您可以通过原始名称引用字体,例如"NeoSansPro-Light"

丑陋,但它的工作原理.

  • 一些说明:在Font Forge中,这可以在"字体信息"下的"元素"菜单中找到.此外,将Font系列设置为什么并不重要,基本上您只需将其从原始系列中更改,以便iOS通过其唯一名称(而非系列/重量)找到它. (2认同)