UIFont fontWithName返回nil

0xS*_*ina 28 cocoa-touch objective-c uifont ios

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

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

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
                                size:16.0f]);
Run Code Online (Sandbox Code Playgroud)

我打印了使用的字体系列[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"
)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢!

ins*_*r-g 79

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

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

  2. 验证字体是否包含在构建目标中(在"复制软件包资源"构建阶段)

  3. 检查密钥的原始值"应用程序提供的字体"以确保它是正确的.在Xcode中查看*.plist时,右键单击并选择"显示原始键/值",然后验证密钥是否为UIAppFonts.

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

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

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

编辑
我不能保证我有与你相同的字体文件,但在我的机器上,PostScript名称是"EdwardianScriptITC"

  • 仅供参考,"由"提供的字体",您必须手动添加到您的应用程序的plist.数组中的值是*filename*.传递给`[UIFont fontWithName:]`的值是PostScript /字体名称. (4认同)

Bey*_*ron 5

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