31

在我的 info.plist 中,我添加了一个键“应用程序提供的字体”并添加了EdwardianScriptITCStd.otf 在此处输入图像描述

但是,当我尝试获取该字体时,它返回 nil:

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
                                size:16.0f]);

我使用打印了字体系列[UIFont familyNames],但它也不存在:

(
    Thonburi,
    "Snell Roundhand",
    "Academy Engraved LET",
    "Marker Felt",
    "Geeza Pro",
    "Arial Rounded MT Bold",
    "Trebuchet MS",
    Arial,
    Marion,
    "Gurmukhi MN",
    "Malayalam Sangam MN",
    "Bradley Hand",
    "Kannada Sangam MN",
    "Bodoni 72 Oldstyle",
    Cochin,
    "Sinhala Sangam MN",
    "Hiragino Kaku Gothic ProN",
    Papyrus,
    Verdana,
    "Zapf Dingbats",
    Courier,
    "Hoefler Text",
    "Euphemia UCAS",
    Helvetica,
    "Hiragino Mincho ProN",
    "Bodoni Ornaments",
    "Apple Color Emoji",
    Optima,
    "Gujarati Sangam MN",
    "Devanagari Sangam MN",
    "Times New Roman",
    Kailasa,
    "Telugu Sangam MN",
    "Heiti SC",
    "Apple SD Gothic Neo",
    Futura,
    "Bodoni 72",
    Baskerville,
    "Chalkboard SE",
    "Heiti TC",
    Copperplate,
    "Party LET",
    "American Typewriter",
    "Bangla Sangam MN",
    Noteworthy,
    Zapfino,
    "Tamil Sangam MN",
    "DB LCD Temp",
    "Arial Hebrew",
    Chalkduster,
    Georgia,
    "Helvetica Neue",
    "Gill Sans",
    Palatino,
    "Courier New",
    "Oriya Sangam MN",
    Didot,
    "Bodoni 72 Smallcaps"
)

我错过了什么?谢谢!

4

6 回答 6

82

我的评论开始变得冗长,所以我决定提交一个答案:)

  1. 自定义字体仅在 iOS 3.2 及更高版本中受支持,因此请确保您的部署目标构建设置不会比 3.2 版本更早。

  2. 验证字体是否包含在您的构建目标中(在“复制捆绑资源”构建阶段)

  3. 检查“应用程序提供的字体”键的原始值以确保其正确。在 Xcode 中查看 *.plist 时,右键单击并选择“Show Raw Keys/Values”,然后验证密钥是否为UIAppFonts.

  4. 我相信 iOS 在使用 时需要字体的 PostScript 名称fontWithName: size:,您可以通过在 Apple 的字体册中打开字体并键入 来查找/验证command+I

  5. 在某一时刻,使用自定义字体和UILabel. 我不确定这个问题是否仍然存在。解决方案是子类UILabel化并在其中设置字体。

如果它仍然不起作用,这个关于自定义字体的 Stack Overflow 线程有相当多的信息,你可能会有一些运气。

编辑
不能保证我有和你一样的字体文件,但在我的机器上,PostScript 名称是“EdwardianScriptITC”

于 2012-04-21T00:57:37.397 回答
6

如果您的字体名称包含“-”字符,请将其替换为空格字符。例如,Arial-Bold.ttf 的使用类似于 [UIFont fontWithName:"Arial Bold" size:10];

于 2015-10-22T07:09:48.267 回答
1

要使用的字体名称似乎是 Font Book 中的“Family name”。我尝试了 PostScript 名称,但它并不总是有效。据我所知,姓氏一直有效。

您可以检查此信息,如上述答案中所述,在 Font Book 中,选择字体并按 cmd+I。

希望这可以帮助...

于 2012-07-12T09:35:28.640 回答
1

我有同样的问题。您可以在情节提要的界面构建器中将字体设置为标签。然后从标签以调试模式获取该字体,例如:

let cfnt = txtUsernameField.font

然后单击小调试窗口上的 i 按钮,字体的系列名称将写入控制台窗口。你可以这样使用它:

txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 
于 2015-03-17T13:21:03.647 回答
0

我有这个问题,虽然我发誓我以前的自定义字体工作得很好。

原来我只需要在 XCode 项目中对我的项目运行“清理”,这样它就可以重新建立引用。

于 2014-05-06T19:31:10.650 回答
0

我遇到的问题是字体系列中的一些字体正确返回,而其他字体返回nil

例如:

  • MuseoSansRounded-500有效的
  • MuseoSansRounded-900

事实证明,Xcode 自动包含了在 Interface Builder 中使用的自定义字体。我在 IB 中使用了 500 粗细的字体,但没有使用 900 粗细的字体。

这两个步骤为我修复了它:

  1. 在构建设置中,找到并禁用Auto-Activate Custom Fonts. 在我的项目中有两个这样的例子。

  2. 在应用启动时,手动向系统注册自定义字体。我使用了这个 SO 答案的片段:https ://stackoverflow.com/a/32600784/131378

以完整性的名义,我本可以保持Auto-Activate Custom Fonts打开状态,然后跳过在代码中注册这些字体。但是,如果我最终在 IB 中使用以前手动注册的新字体,我不想在开发过程中更新代码。如果您注册了已经自动激活的字体,Xcode 会报错。

于 2018-06-29T20:52:55.290 回答