使用Swift将自定义字体添加到macOS应用程序

时间:2017-01-21 22:58:24

标签: swift macos fonts info.plist nsfont

我遵循了一堆教程,但它不起作用:我只是想在macOS应用程序中添加自定义字体。

我本质上尝试了什么:

  1. .ttf字体文件添加到我的项目:设置了目标成员资格,我还确保使用Copy Files中的Bundle Phases复制文件。编译后我可以看到所有文件都在Bundle中。所以这似乎完全正常。
  2. enter image description here

    1. Info.plist:我添加了Fonts provided by application ,并为我要添加的每个字体文件创建了一个项目(myFont.tff等值)。< / p>

    2. 我确保使用正确的字体名称。我在我的系统上安装了字体,并使用Interface Builder配置了Label,以便它使用所需的字体。我打印了它的值print(myLabel.font.fontName)

    3. 令人困惑:如果要添加到应用程序的完全相同的字体文件安装在系统Fontbook中并激活,则一切正常。当我停用它时,它不起作用。对我来说,这表明我使用了正确的字体名称。

    4. 我找到ATSApplicationFontsPath并尝试将其添加到Info.plist ,但都没有使用路径(文档推荐)或{{1}等值(这似乎适用于那里的一些人)解决了。

    5. enter image description here

      感谢任何帮助!

5 个答案:

答案 0 :(得分:3)

我偶然解决了我的问题。

我注意到在Bundle文件中,我的字体被包含了两次:它们被复制到&#34;资源&#34;目录以及我在&#34;复制文件&#34;中声明的子路径;建立阶段。 我从项目中删除了字体,再次添加它们(不检查&#34; Target Membership&#34;)并将它们添加到Build Phases中,以便将它们复制到子路径中。之后它起作用了。

附加说明:

原来,Fonts provided by application是仅限iOS的属性,因此macOS实现不需要它。

此外,ATSApplicationFontsPath不需要任何斜杠。例如:Fonts应该可以正常工作。

我很难找到.ttf字体文件的正确名称,有时会发现一些奇怪的行为:NSFont从字体系列中随机选择字体(常规,中等,粗体......)而不进行任何代码更改。通过使用.otf文件,我也可以解决这个问题。

答案 1 :(得分:1)

ATSApplicationFontsPath(即Application fonts resource path)相对于应用包的Resources文件夹。

要查看字体的复制位置:

  1. 在Xcode中,展开Project Navigator下的Products部分,然后单击Finder in Finder
  2. Locate app bundle

    1. 在Finder中,按住Ctrl键并单击您的应用,然后单击“显示资源内容”。浏览到Resources文件夹并在那里找到您的字体。 enter image description here

答案 2 :(得分:1)

以上所有内容均不适用于运行BigSur的Xcode 12 beta 1,但这些步骤确实有效。

  1. 为组织创建一个Fonts文件夹。
  2. 将字体添加到项目中。确保检查macOS目标!
  3. 将“应用程序字体”资源路径设置为“”。 (无引号)。

无需编辑构建阶段或其他任何内容。

答案 3 :(得分:1)

Xcode 12添加自定义字体,您必须从提供的字符串中排除扩展名。

.font(.custom(“您的字体名称”,大小:xx))//每次都可以工作

.font(.custom(“您的字体名称.extension”,size:xx))//始终失败

对于Xcode 11.xx,在fontname.extension起作用的情况下,这是不正确的。

答案 4 :(得分:0)

我很难根据以前的答案来解决这个问题,所以我决定自己写一个答案。这是基于@ixany和@ rob-keniger的先前答案。

  1. 创建一个名为Fonts的文件夹

enter image description here

  1. 将字体添加到Fonts文件夹中。取消选中Add to targets,然后选中Copy items if needed

enter image description here

  1. Application fonts resource path添加到Info.plist并输入Fonts

enter image description here

  1. 转到Build Phases并创建一个New Copy Files Phase

enter image description here

  1. Destinations设置为Resources,将Subpath设置为Fonts。然后将字体文件添加到列表中。

enter image description here