【问题标题】:How to use custom fonts in a mac application?如何在 mac 应用程序中使用自定义字体?
【发布时间】:2015-02-25 04:02:42
【问题描述】:

我尝试在我的 swift 应用程序中使用自定义字体,但它们无法加载。

我将 fonts.ttf 复制到我的资源文件夹中,并在 Info.plist 中的“应用程序提供的字体”键下添加了名称。

我尝试使用 .plist 中的“应用程序字体资源路径”键,但没有结果。 这是我用来应用字体的代码。我尝试过:“MyFont.ttf”和“MyFont”

@IBOutlet weak var label:NSTextField!

override func awakeFromNib() {
    label.font = NSFont(name: "MyFont.ttf", size: 15)
}

【问题讨论】:

  • 来自另一个 SO 答案(抱歉现在找不到):可以通过打开字体册中的字体并使用检查器窗格中显示的 PostScript name 旁边的字符串来找到名称字符串.

标签: xcode macos swift custom-font


【解决方案1】:

由于“应用程序字体资源路径”现在是 XCode 7.3.1 中的字符串类型,我似乎无法找到将数组用于多种字体的方法,所以我使用了“。”在 Info.plist 中:

     Application fonts resource path     String    .

这似乎可以在资源文件夹中动态获取我的所有自定义字体,例如使用 Swift

 labelText.font = NSFont(name: "DS-Digital", size: 48)

但是,要在 XCode 设计模式下查看它(从下拉菜单中选择字体),我需要先将字体添加到 Font Book。

但是,动态方法不需要字体书 :)

【讨论】:

  • 这个解决方案救了我!!谢谢
  • 也发现如果你把字体放到一个文件夹中,比如“Fonts”,你可以使用“Fonts”作为字符串值。
  • 难以置信!!!只有一个点,但节省了我的时间!谢啦!你太棒了
  • 使用单个 .为我工作。
【解决方案2】:

ATSApplicationFontsPath is for macOS:

ATSApplicationFontsPath (String - ma​​cOS) 标识一个 捆绑包资源目录中的字体文件或字体目录。 如果存在,macOS 将激活指定路径中的字体以供 捆绑的应用程序。字体仅针对捆绑的应用程序激活,并且 不适用于整个系统。路径本身应指定为 捆绑包资源目录的相对目录。例如, 如果字体目录在路径中 /Applications/MyApp.app/Contents/Resources/Stuff/MyFonts/,你应该 指定字符串 Stuff/MyFonts/ 作为该键的值。

ma​​cOS 应用说明:

  1. 项目导航器中选择您的 Xcode 项目
  2. 选择您的 应用目标
  3. 点击+按钮并添加新建复制文件阶段
  4. 目标选择资源
  5. subpath 下指定将嵌入字体复制到应用程序包资源目录中的目录(例如 Fonts)。
  6. 将字体文件拖放到复制文件构建阶段的文件列表中。

UIAppFonts is for iOS:

UIAppFonts (Array - iOS) 指定应 可以通过正常机制获得。中的每一项 数组是一个包含字体文件名称的字符串(包括 文件扩展名)位于应用程序的捆绑包中。系统 加载指定的字体并使它们可供应用程序使用 该应用程序何时运行。

iOS 3.2 及更高版本支持此键。

【讨论】:

  • 我已经尝试了几乎所有的东西,这实际上是适用于 mac os 的。这也是最简单的解决方案。
【解决方案3】:

首先将您想要嵌入到您的 OSX 应用程序的所需字体添加到您的项目中:

然后单击项目>信息,然后单击加号并添加一个新键“应用程序字体资源路径”并在此处键入字体名称,创建一个字符串数组:

现在您可以选择自定义字体,字体名称将显示在那里,您仍然需要使用字体手册使其在 Xcode 中可用。

【讨论】:

  • 我觉得我疯了!我做了这个,就像你说的那样,但是,什么都没有。添加的字体不在字体列表中。
  • 你能把字体链接发给我吗?问题可能与选择的字体有关。你试过其他字体吗?
  • 应用字体资源路径为字符串类型,无法添加字符串数组
  • 嗨,如果应用程序字体资源路径是字符串而不是数组,我无法像您使用该图像那样添加字体
  • 对我来说这是个问题,字体必须先安装在系统中(即字体册),然后才能嵌入到应用程序中。这看起来很荒谬,但我假设解释是这样您可以在 Interface Builder 中使用它,但是即使您只在代码中创建字体,它也需要最初安装在 Font Book 中,然后您可以根据需要将其删除到。而且苹果没有在页面上提到如何在你的应用程序中嵌入字体,所以它非常令人困惑。此外,对于 macOS,我使用的是 plist 键“应用程序提供的字体”而不是“应用程序字体资源路径”。
【解决方案4】:

通过直接将应用程序字体资源路径设置为我的字体文件名,我完全靠运气解决了这个问题。

【讨论】:

  • 我只是把它留空,它工作了 ATSApplicationFontsPath 我的字体在 Resources 根文件夹中。
【解决方案5】:

对于那些字体系列被称为 My-Custom-Font-Family 的人: 请注意,在代码中您应该像这样实例化您的自定义字体:NSFont(name: "MyCustomFontFamily-Bold", size: 20) 空格和“-”被忽略,字体类型写在“-”之后。我在任何文档中都没有看到这一点,我花了几个小时试图找出 wtf 是错误的。 此外,如果您想获取所有可用字体的列表,您可以使用此代码

for font in NSFontManager.shared.availableFonts {
    print(font)
}

【讨论】:

  • 我有MyFont-Bold.tff,应该如何实例化这个。
  • @ArdentLearner 就像我提到的那样:NSFont(name: "MyFont-Bold", size: 20)
【解决方案6】:

尝试从界面构建器的属性检查器中执行此操作。

【讨论】:

  • 从 IB 我只能访问已安装的系统字体。我想加载我自己的字体。
  • 在 IB 中,属性检查器(字体行)单击“T”并单击字体,然后单击自定义。如果你想要(例如 MyFont),首先你必须加载到 OS X(Font Book),然后你可以选择你的字体。对不起我的英语不好。
  • 但这只是为我解决问题。如果我在 fontBook 中安装 .ttf 字体,我可以很容易地使用它,但是,每个使用我的应用程序的用户都需要安装该字体,我很确定一件事:用户很懒。
  • 首先你需要把你的字体放到项目中,并在 info.plist 中使用 ATSApplicationFontsPath 键。更多信息developer.apple.com/library/mac/documentation/General/Reference/…
  • 应用程序字体资源路径是 ATSApplicationFontsPath 的新键名,所以我已经这样做了,但是,可能做错了。
猜你喜欢
  • 2013-05-12
  • 2011-03-31
  • 1970-01-01
  • 2014-07-21
  • 2012-03-10
  • 2012-09-27
  • 2013-11-09
  • 2012-03-18
  • 2011-09-13
相关资源
最近更新 更多