30

看起来有一些在 iPhone 上使用自定义真实类型字体 (ttf) 的工作解决方案,最值得注意的是我可以在 iPhone 应用程序中嵌入自定义字体吗? 但是,此方法不支持开放式字体 (otf)。

有没有人遇到过使用 otf 字体的方法?

4

7 回答 7

70

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

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

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

在我的情况下@"Harrowprint",是没有扩展名的文件名,而不是 Finder 提供的字体名称。

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

参考:

于 2011-01-06T19:37:27.017 回答
22

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

于 2009-09-03T10:09:41.147 回答
17

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

  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];
于 2012-08-22T20:02:56.960 回答
8

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

完美支持OTF,无需转TTF

于 2014-01-31T20:54:42.337 回答
3

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

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

于 2012-08-06T05:08:47.023 回答
2

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

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 现在应该有这个:

info plist 现在应该是这样的

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

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

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

于 2013-10-28T01:42:40.987 回答
0

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

for family in UIFont.familyNames {
    print("font family", family)
    for names in UIFont.fontNames(forFamilyName: family) {
        print("font name \(names)")
    }
}
于 2021-11-22T22:23:42.377 回答