12

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

我基本上尝试了什么:

  1. .ttf字体文件添加到我的项目中:目标成员资格已设置,我还确保使用Copy Fileswithin复制文件Bundle Phases。编译后我可以看到所有文件都在 Bundle 中。所以这似乎工作得很好。

在此处输入图像描述

  1. Info.plist:我为每个要添加的字体文​​件添加Fonts provided by applicationmyFont.tff并创建了一个项目(值如)。

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

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

  4. 我找到ATSApplicationFontsPath并尝试将其添加到 中Info.plist,但使用路径(由文档推荐)或值.(似乎对那里的某些人有用)都没有成功。

在此处输入图像描述

感谢任何帮助!

4

5 回答 5

13

根据以前的答案,我很难让它工作,所以我决定自己写一个答案。这是基于@ixany 和@rob-keniger 之前的回答。

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

  1. 设置DestinationstoResourcesSubpathto Fonts。然后将您的字体文件添加到列表中。

在此处输入图像描述

于 2019-08-08T12:14:58.797 回答
10

我偶然解决了我的问题。

我注意到在捆绑文件中,我的字体被包含了两次:它们被复制到“资源”目录以及我在“复制文件”构建阶段中声明的子路径。我从我的项目中删除了字体,再次添加它们(没有检查“目标成员资格”)并将它们添加到构建阶段,因此它们被复制到子路径中。之后它起作用了。

补充说明:

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

此外,ATSApplicationFontsPath不需要任何斜线。例如:Fonts应该工作得很好。

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

于 2017-01-25T14:32:20.063 回答
2

在运行 BigSur 的 Xcode 12 beta 1 中,上述方法对我不起作用,但这些步骤确实有效。

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

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

于 2020-06-29T20:08:02.357 回答
2

该值ATSApplicationFontsPath(即Application fonts resource pathResources与您的应用程序包的文件夹相关。

要查看字体复制到的位置:

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

找到应用程序包

  1. 在 Finder 中,按住 Ctrl 键单击您的应用,然后单击显示资源内容。浏览到该Resources文件夹​​并在那里找到您的字体。 在此处输入图像描述
于 2017-01-21T23:32:55.000 回答
1

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

IE

.font(.custom("your font name", size:xx)) // 每次都有效

.font(.custom("your font name.extension",size:xx)) // 总是失败

Xcode 11.xx 并非如此,fontname.extension 正在工作。

于 2020-09-18T03:04:13.067 回答