【问题标题】:UIFont fontWithName returns nilUIFont fontWithName 返回 nil
【发布时间】:2012-05-02 13:33:47
【问题描述】:

在我的 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"
)

我错过了什么? 谢谢!

【问题讨论】:

  • 您是否确认该字体包含在您的构建目标中(在“复制捆绑资源”构建阶段)?
  • 另外,我会检查“应用程序提供的字体”键的原始值,以确保它是正确的。在Xcode中查看*.plist时,右键选择“Show Raw Keys/Values”,然后验证key是UIAppFonts
  • 是的,原始值是 UIAppFonts,它包含在我的副本包资源中
  • 自定义字体的完整教程在这里 - codigator.com/tutorials/using-custom-fonts-in-ios-application。希望你能找到你的问题。可能是命名问题或字体未添加到目标。

标签: objective-c ios cocoa-touch uifont


【解决方案1】:

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

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

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

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

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

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

如果它仍然不起作用,this Stack Overflow thread on custom fonts 有很多信息,你可能在那里有一些运气。

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

【讨论】:

  • 感谢您的详细回复。 #2 是问题所在,即使我仔细检查过,它实际上不在我的副本构建阶段(这表明我需要尽快上床睡觉)。
  • 仅供参考,“字体提供者”,您必须手动添加到应用的 plist。数组中的值是文件名。传递给 [UIFont fontWithName:] 的值是 PostScript/字体名称。
  • 很棒的清单! #4 是我的问题
  • #3 也是我所缺少的
  • 有用信息,+1 也是 #4 问题
【解决方案2】:

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

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

希望这会有所帮助...

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      let cfnt = txtUsernameField.font
      

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

      txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 是的,为我工作!我有“-”,通过以它工作的字体的名称擦除所有它们!谢谢!
        • 伙计,拯救了我的一天
        【解决方案6】:

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

        例如:

        • MuseoSansRounded-500有效
        • MuseoSansRounded-900

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

        这两个步骤为我解决了这个问题:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-20
          • 1970-01-01
          • 2013-07-07
          • 2015-07-04
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多