【问题标题】:iOS Custom Fonts don't show up on deviceiOS 自定义字体不显示在设备上
【发布时间】:2013-09-25 18:32:36
【问题描述】:

我已经针对类似的问题进行了梳理,其中大多数似乎告诉我,我可能忘记将字体添加到复制资源构建阶段。我还确保这两种字体都是构建目标的一部分。

我已经检查了两次和三次。两种字体都处于复制资源阶段,并且都在 plist 中列出。

在我的应用委托中,我检查了哪些字体可用于它们各自的字体系列,我得到了意想不到的结果

NSLog(@"%@", [UIFont fontNamesForFamilyName:@"DS-Digital"]);
NSLog(@"%@", [UIFont fontNamesForFamilyName:@"Proxima Nova"]);

第一个打印出我想要的“(“DS-Digital-Italic”)”,第二个打印出“(“ProximaNova-Regular”)”,也是预期的。

当我去使用以下任何一种字体时,它只出现在模拟器中,但在任何设备上它默认回到系统字体。

[_estimateLabel setFont:[UIFont fontWithName:@"DS-Digital-Italic" size:50]];

[cell.mainLabel setFont:[UIFont fontWithName:@"ProximaNova-Regular" size:20]];

我有什么遗漏吗?我在 iPad mini 和 iPhone 5C 上使用 XCode 5,都是 iOs 7。

【问题讨论】:

    标签: ios objective-c fonts


    【解决方案1】:

    在 Fontbook 中打开字体(它随您的 mac 提供)。确保您使用后置脚本名称来调用它,如下所示:

    它被@"HelveticaNeueCE-Thin"调用

    另外,当您将字体添加到项目时,请确保您在“添加到目标:”中检查了字体名称,如果您没有这样做,它们将不会被复制到发送到的应用程序包中你的设备。

    【讨论】:

    • 谢谢!是的,这些名称与 Fontbook 中的 PostScript 名称相匹配。这两个字体文件都是目标的一部分,并且在 plist 中。仍然无法在设备上运行。只是模拟器。
    • @jlindenbaum 是所有字体都这样,还是只有这两种?
    • 当我在设备上打印出家庭和可用名称时,Proxima 出现了,DS-Digital 没有。
    • 您说他们都登录了您最初的问题 - 他们是否登录?:) 您是否尝试从捆绑包中删除该应用程序并再次添加它?我很无知,但你可以试试我会做的方式。我会用一个标签创建一个新的干净项目,尝试添加字体等,看看它是否是你的项目、字体、xcode 或故障所在。我发现排除所有可能的因素会更容易解决问题。
    • 感谢 Oscar,它最终成为了捆绑字体和使用正确名称的组合。一旦我们摆弄了足够多的东西,它终于奏效了。
    【解决方案2】:

    您确定字体名称拼写正确吗? 请参阅此帖子Can I embed a custom font in an iPhone application? 以供参考

    【讨论】:

    • 是的,字体名称与字体册中的名称相匹配。字体也在正确的目标中。
    【解决方案3】:

    我以编程方式编写,所以我不知道在 XCode 中是否有更简单的方法,我什至不在 Mac 上开发,但我会像这样加载自定义字体:

    // Load font
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:@"/path/to/font.ttf"]);
    CGFontRef uiFont = CGFontCreateWithDataProvider(fontDataProvider);
    NSString * uiFontName = (__bridge NSString *)CGFontCopyPostScriptName(uiFont);
    CGDataProviderRelease(fontDataProvider);
    CFErrorRef error;
    CTFontManagerRegisterGraphicsFont(uiFont, &error);
    CGFontRelease(uiFont);
    UIFont *yourfont = [UIFont fontWithName:uiFontName size:20.0f];
    

    我猜 XCode 有办法为你做这件事,但如果你只是想要一个可以工作的 sn-p 代码,这总是一个选择

    【讨论】:

    • 对于标签上的自定义字体来说,这似乎是一项非常艰巨的工作。 XCode 有更好的方法来做到这一点,是的。
    【解决方案4】:

    在您的 AppDelegate 中运行此命令以查看在设备上运行时字体系列和名称是否出现:

    for (NSString *family in [UIFont familyNames]) {
        NSLog(@"%@", family);
        for (NSString *name in [UIFont fontNamesForFamilyName:family]) {
            NSLog(@"\t%@", name);
        }
    }
    

    如果确实出现了字体系列和名称并且拼写正确,那么字体文件可能存在问题...?查看设备日志(或控制台)以查看使用该文件是否有任何错误。

    字体是否有可能在代码中的其他地方或者甚至是界面生成器中被覆盖?你在哪里设置字体?

    【讨论】:

    • 在我的问题中,您可以看到我使用setFont:[UIFont fontNamed:@""] 将字体分配给标签当我在模拟器上运行它时,我看到两种字体都打印在控制台中。在设备上我看到 proxima,但我没有看到 DS-Digital,尽管它们都在复制资源和目标中。
    • 抱歉,我了解到您正在为标签设置字体。我的问题是关于您在代码中的哪个位置设置字体。在viewDidLoad:,viewWillAppear:?你是从 dafont 得到这个字体的吗?我刚刚下载了该字体(DS Digital),将其重命名为“digifont-italic.ttf”并将其包含在一个应用程序中,没有任何问题。如果它没有显示在您的字体列表中,则必须在构建阶段或 plist 中出现故障。尝试删除字体并尝试重新添加。否则,创建一个新项目,然后重新导入所有内容。
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2013-03-31
    • 2023-03-04
    • 2012-04-20
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多