【问题标题】:Has anyone had success using custom otf fonts on the iPhone?有没有人在 iPhone 上使用自定义 otf 字体成功?
【发布时间】:2010-11-25 04:16:24
【问题描述】:

看起来有一些在 iPhone 上使用自定义 true type 字体 (ttf) 的可行解决方案,最值得注意的是 Can I embed a custom font in an iPhone application? 但是,此方法不支持开放式字体 (otf)。

有没有人发现使用 otf 字体的方法?

【问题讨论】:

    标签: iphone fonts opentype


    【解决方案1】:

    对于我自己的项目,我想使用opentype字体,我基本上使用了这种方法:

    使用 XCode 作为资源将自定义字体文件添加到项目中 在 info.plist 文件中添加一个键(应用程序提供的字体) 对于您拥有的每种字体,输入您的字体文件的全名(包括扩展名) 保存 info.plist 然后将其用于您的标签(例如:)

    UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];
    

    在我的例子中,@"Harrowprint" 是不带扩展名的文件名,而不是 Finder 提供的字体名称。

    我的字体是 otf 并且它可以工作......所以我猜它是受支持的......或者我很幸运。我会测试另一种字体..并让你发布..

    参考:

    【讨论】:

    • 谢谢你,你的解决方案真的很简单,效果很好。非常感谢。
    • 这确实应该是公认的答案。接受的答案更像是一种不必要的解决方法。
    • This 确实是一个很好的信息来源。与上面概述的不同,您不能假设字体的文件名将等于实际的字体名称(这是 UIFont fontwithName 调用所需要的)。
    【解决方案2】:

    您必须在设备上使用 otf 字体还是可以将其转换为 ttf?使用fontforge之类的工具将OTF字体转换为TTF字体相对简单,也许这是一个简单的解决方案。

    【讨论】:

    • 谢谢,这很好用,随后转换的 otf->ttf 字体被上面链接的 FontLabel 代码接受。仅供参考:尝试通过启动软件包在 Snow Leopard 上安装 FontForge 会产生错误,提示无法在“此版本”操作系统上安装。但是,该应用程序仍然安装在应用程序文件夹中并且可以正常运行。安装程序包可能出现 64 位错误。
    • 存在一些错误,因为并非所有字体都可以正常工作。也可以尝试使用其他字体来确定。在我的情况下,我成功地将字体安装到我的 Mac 上,但字体仍然无法在 iOS 上使用。
    • 这里是在线转换OTF到TTF的工具freefontconverter.com/index.php
    • 此链接codewithchris.com/… 最有用的回答如下,无需将.otf 转换为.ttf,此链接帮助我使用客户提供的.otf。
    【解决方案3】:

    我也遇到了麻烦。这对我有用:

    1. 将字体文件复制到资源中。
    2. 检查字体文件是否在“构建阶段”->“复制捆绑资源”中(当我将文件添加到资源时,Xcode 将它们放在那里。如果由于某种原因它们不存在,添加它们。
    3. 如上所述,将文件名添加到您的 info.plist 文件中。包括扩展。
    4. 打开字体册,选择您的字体并预览-显示字体信息,然后查看“Family”,例如“Foo”
    5. 将它放在代码中的某个位置并设置断点来检查名称数组:NSArray *names = [UIFont fontNamesForFamilyName:@"Foo";
    6. 运行您的应用程序,当它中断时,右键单击调试器中的“名称”变量。这将向您显示要使用的字体名称,例如:<__NSCFArray 0xe9c4da0>( Foo-100Italic, Foo-100 )
      请注意,我的字体名称未显示 在其他任何地方都正确,而不是在文件名或字体册中。
    7. 你应该很适合:
      myLabel.font = [UIFont fontWithName:@"Foo-100Italic" size:24];

    【讨论】:

    • 在 Font-Book 中,我的字体的真实名称与“PostScript 名称”相同。这是唯一对我有用的东西。我过去使用过自定义字体,直到现在都没有遇到过问题。不知道发生了什么变化,但谢谢。
    • 第4、5、6点真的很有用!
    【解决方案4】:

    这篇文章回答了你的问题(它对我来说就像使用 OTF 的魅力一样): http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

    完美支持OTF,无需转TTF

    【讨论】:

      【解决方案5】:

      关于第一个答案 - 解决方案是正确的(即只需将字体转换为 TTF),但建议的软件编译和安装非常麻烦。相反,我只是做了一个快速的谷歌搜索并改用它:http://www.freefontconverter.com/ 并且效果很好。

      (确保也将字体添加到您的 info.plist 文件中)

      【讨论】:

      • +1 供参考。但是,不要依赖以特定顺序出现的答案(即“第一个答案”)——顺序会随着用户设置、投票等而变化。
      【解决方案6】:

      我对此进行了彻底的研究,这是我发现的最好的方法:

      1) 使用此在线工具将字体文件转换为 TTF:http://www.freefontconverter.com/

      2) 将 TTF 文件添加到您的项目中

      3) 对 info.plist 文件进行一些配置:

      3.1)将info.plist编辑为源代码(右键文件->打开方式->源代码)

      3.2) 添加这个:

       <key>UIAppFonts</key>
       <array>
        <string>font1.ttf</string>
        <string>font2.ttf</string>
        ...etc...
       </array>
      

      3.3) 你的 info.plist 现在应该有这个:

      4) 像系统字体一样使用新字体:

      [UIFont fontWithName:@"font1" size:16.0];

      (注意字体名称中没有“.ttf”)

      【讨论】:

      • 这很完美,谢谢!值得注意的是,您不必编辑 plist 的源代码,您可以在应用程序目标的“信息”窗格中的“自定义 iOS 目标属性”下添加这些。 jednorog.sneakyness.com/image/2Q2O1j1l2E2Z
      【解决方案7】:

      您应该使用字体名称,而不是字体文件名称。要获取字体名称,请运行

      for family in UIFont.familyNames {
          print("font family", family)
          for names in UIFont.fontNames(forFamilyName: family) {
              print("font name \(names)")
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 2010-11-02
        • 2019-09-14
        相关资源
        最近更新 更多