Xcode 8 自定义字体未显示在界面生成器中
Xcode 8 custom font doesn't show up in interface builder
我正在尝试在我的 iOS 应用程序中使用自定义字体 (Bebas Neue)。我采取的步骤是:
- 将 .otf 文件复制到项目中。
- 确认 .otf 文件已将项目设置为目标。
- 在 plist 'Fonts provided by application' 中添加了 .otf 文件。
- 在构建阶段中,.otf 文件位于 'Copy Bundle Resources'。
- 在我的 Mac.
上安装字体
- 尝试打印所有可用字体,但我看不到自定义字体。
我使用的代码:
for name in UIFont.familyNames() {
println(name)
if let nameString = name as? String
{
println(UIFont.fontNamesForFamilyName(nameString))
}
}
- 尝试在代码中设置字体并且成功了。
我使用的代码:
textLabel?.font = UIFont(name: "BebasNeueRegular", size: 14)
- 但我无法在界面生成器中设置它。有什么想法吗?
截图:
尝试以下步骤: 在 Swift 3
.
中测试的代码
第 1 步:将自定义字体添加到项目中(确保添加到目标
勾选)。我正在使用 "PermanentMarker.ttf"、"Pecita.otf" 和 "AROLY.ttf" 字体作为测试字体。
注意:支持字体类型ttf和otf(两种字体类型都应该有效)
第二步:修改application-info.plist文件。
在新行中添加键 "Fonts provided by application",并将 "PermanentMarker.ttf" 作为新项添加到数组“Fonts provided by application”。
您的 plist 应该如下所示
现在该字体将在 Interface Builder 中可用。要在代码中使用自定义字体,我们需要通过名称来引用它,但名称通常与字体的文件名不同
现在,您可以从 viewController 访问自定义字体。我正在通过将 UIlabel 放置到 Storyboard 来测试字体,如下所示。
更新二: Working Solution
之后,导入您的自定义字体并更新您的 plist
。selectlabel
从您的 storyBoard
,转到 Label
下的 Attributes Inspector
>Text type
> select 到 Attributed
并从列表中选择您的 custom font
。
输出:
更新 1
如果您的自定义字体仍未在 Xcode font list
中列出。请检查与您的问题相关的 link
http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/
custom font not displaying on some simulator
注意: 不过,您可以通过编程方式将 BebasNeue
或 custom font
分配给您的标签或按钮等,即使它没有显示在您的 interface Builder
。如果您在设置对象字体时遇到问题 programatically.try 下面的方法。
为 UILabel 指定字体:
label?.font = UIFont(name: "BebasNeue", size: 35) // Set to any size
为 UIButton 指定字体:
button.titleLabel?.font = UIFont(name: "BebasNeue", size: 35)
为 UITextField 指定字体:
textField.font = UIFont(name: "BebasNeue", size: 25)
为 UINavigationBar 指定字体:
navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "BebasNeue", size: 25)!, NSForegroundColorAttributeName: UIColor.red]
为 UIToolBar 指定字体:
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "BebasNeue", size: 25.0)!], for: UIControlState.normal)
输出:
文件夹名称和字体名称之间可能存在差异解决方案是:
- 打印所有默认字体名称。(没有自定义字体)
- 向项目添加自定义字体。
- 打印所有字体名称。
然后比较字体名称。
func printFontsNames() {
let fontFamilyNames = UIFont.familyNames
for familyName in fontFamilyNames {
print("------------------------------")
print("Font Family Name = [\(familyName)]")
let names = UIFont.fontNames(forFamilyName: familyName )
print("Font Names = [\(names)]")
}
}
这是 old bug 自 Xcode 3.x:
there is a bug/known issue with IB on XCode 3.x with non-standard fonts and Interface Builder. Custom fonts generally need to be set programatically (via [UIFont fontWithName:])
有一些解决方法,例如 this 和 User Defined Runtime Attribute
和 categories
。
当使用相同的字体 (Bebas Neue) 时,我遇到了完全相同的问题:该字体未显示在 Plain
控件的字体列表中。
它适用于 Attributed
控件,如 Joes post 的更新 2 中所述,但您实际上是在更改 attributedText
而不是常规 text
,这可能会导致不良行为。例如,您必须 fiddle 和 NSMutableAttributedString
才能在运行时更改文本或文本颜色。
我对这个问题做了一些调查。我用了 FontLab Studio to modify the font and do some tests. I used Bebas Neue version 1.400 (dated September 15, 2014) from dafont.com.
- 可能是字体文件被损坏了。 Re-saved 作为 .otf 和 .ttf:没用。
- 可能字体的元数据已损坏。将所有字形复制到一种新字体并命名为 Bebas Neue:没有用。
- 我将字体从 Bebas Neue 重命名为 BN:有效! 但为什么呢?
- 也许您不能在字体名称中使用 "Neue"(因为 Helvetica Neue 是 iOS 系统字体,直到 iOS 8)。将字体重命名为 Test Neue:仍然有效。
- 也许你不能在字体名称中使用 "Bebas"?将字体重命名为 Bebas:仍然有效。
- 什么...只是为了确定,我将字体名称改回 Bebas Neue:再次不起作用。
- 我也试过 BebasNeue:也没用。
然后我把名字改成了 Bebas Neue Whatever: 它有效。
我真的不明白为什么会这样。
Apple 或 Xcode 不希望您在 Interface Builder 中使用 "Bebas Neue" 或 "BebasNeue" 吗?
我安装了正常的 Bebas Neue。也许引用已损坏?
我真的不知道。如果 Bebas Neue 在他们的 Xcode.
中工作,也许使用干净系统的人可以尝试
无论如何,我实现了我的目标:能够将 Bebas Neue(我将最终版本命名为 "Bebas Neue MyAppName")用于 Plain
样式的标签和按钮,因此我可以设计我的应用程序 as-is 并且不必 fiddle 使用属性字符串。
您实际上可以直接进入属性字体,单击自定义字体 window。单击左上角的齿轮,然后单击选项管理字体。 window 应该弹出并在顶部,并且应该有一个加号以允许您添加字体。只需选择您下载的自定义字体,如 xyz.tff,然后应将其添加。
需要注意的重要一点是,ttf 文件应该在 p-list 以及您的项目目录中引用!
我有类似的问题
添加了自定义字体并将其分配给 UILabel
一切正常,但在几次之后它不会按预期工作。
尝试了所有解决方案,但对我没有任何作用。所以这是我的解决方案,再次转到以前的 UILabel
(已经有新添加的自定义字体) select->label->select 新添加的字体。检查其他 UI 控件字体。
现在一切正常。
希望这对新开发者有帮助...
现在简单易行- 在 Xcode 10 和 swift 5
中进行了测试
将字体添加到 Xcode
的步骤
Select 您的 UILabel、UITextField 或其他字体部分下的内容,然后按照
步骤 1
Select 字体选择屏幕左角的设置菜单。并选择字体管理器选项。
步骤 2
单击下面标记的添加按钮。
步骤 3
Select 包含您的字体的文件夹。它将被加载到 XCode 字体列表中。
将字体添加到项目的步骤
不要忘记使用关键字 Fonts provided by application
向您的 plist 添加描述,并将字体文件放入项目目标设置下的复制包资源中。
是的!就是这样..享受..
最后,我找到了 Bebas Neue 字体问题的根本原因。
我不记得我在哪里下载了字体,但是 Bebas Neue 字体 不一致。
下载 即应用程序名为 Typelight
打开非常规,但即 粗体 字体 Typelight
。
您需要更正大部分 Bebas Neue 字体。
这对我来说仍然是 Swift 4.2 的一个反复出现的问题,即使没有进行任何可能导致它的更改。
从 Xcode 项目中删除字体文件并重新添加它们可以解决问题(直到下一次)。
就我而言,Interface builder 中缺少一个字体系列,因为该系列中的一种字体未添加到项目中,但在 info.plist 文件中指明。
通常从项目中删除我所有的自定义字体并重新添加它们 - 解决了问题。
TLDR
在 Mac OS 中创建一个新用户帐户,然后在执行我在下面执行的所有步骤之前,看看您是否能够在新帐户中取得成功。事后看来,我可能只需执行第 7 步和第 11 步就可以省去数小时的麻烦。
问题
在不情愿地从 Mojave 升级到 Catalina 以便我可以 运行 最新但不是最好的版本 Xcode (11.5) 之后,我无法再 select 自定义来自界面生成器中 PLAIN 文本控件的字体选择器的字体。
正如其他人所提到的,属性文本工作正常,因为它使用系统字体选择器而不是“黑框/这些字体来自哪里???”使用纯文本时出现的选择器。
失败的步骤
我尝试了以下步骤但没有成功:
- 将字体文件重新添加到项目中,希望 Xcode 能够修复
link 到选择器从中加载的字体 table(仍然
不知道为什么选择器中有某些字体以及它在哪里
正在从中获取它们)。
- 使用多个终端命令重置 Mac OS 字体缓存,希望选择器从 OS
中损坏的字体缓存加载列表
- 通过在字体簿应用程序中选择
File > Restore Standard Fonts
重置系统字体
- 对着电脑尖叫,诅咒 Apple 变成这样
- 尝试在 OS 中安装字体以查看是否解决了任何问题,因为我记得几年前我 运行 进入类似的东西时它起作用了。
- 在 Internet 上搜索任何线索并尝试几乎所有似乎合理的方法。
- 创建了一个 b运行d 新的简单项目...仍然无法select 自定义字体...呃哦
请来大佬们
- 诅咒自己没有执行 Catalina 的干净安装,并决定从头开始重新安装 Catalina。
- 意识到我在重新安装之前使用 Time Machine 备份我的数据时犯了一个错误,因为它不会让我只带入我的数据文件。迁移助手要求导入库数据(恢复时选项变灰),我不想这样做......再次诅咒苹果和我自己,因为我知道这会咬我......正如我所怀疑的那样配置文件中有垃圾导致了这个(我是对的......见下文)
- 试图 select Xcode 中的字体,同时 运行 在迁移助手的导入帐户下...同样的问题...无法 select自定义字体
成功!!!
- 创建了一个新用户并在该帐户下创建了一个新的简单项目。答对了!!!我现在可以 select 一个字体了!!!在升级到 Catalina
期间,我的用户帐户不知何故损坏了
我正在尝试在我的 iOS 应用程序中使用自定义字体 (Bebas Neue)。我采取的步骤是:
- 将 .otf 文件复制到项目中。
- 确认 .otf 文件已将项目设置为目标。
- 在 plist 'Fonts provided by application' 中添加了 .otf 文件。
- 在构建阶段中,.otf 文件位于 'Copy Bundle Resources'。
- 在我的 Mac. 上安装字体
- 尝试打印所有可用字体,但我看不到自定义字体。
我使用的代码:
for name in UIFont.familyNames() {
println(name)
if let nameString = name as? String
{
println(UIFont.fontNamesForFamilyName(nameString))
}
}
- 尝试在代码中设置字体并且成功了。
我使用的代码:
textLabel?.font = UIFont(name: "BebasNeueRegular", size: 14)
- 但我无法在界面生成器中设置它。有什么想法吗?
截图:
尝试以下步骤: 在 Swift 3
.
第 1 步:将自定义字体添加到项目中(确保添加到目标 勾选)。我正在使用 "PermanentMarker.ttf"、"Pecita.otf" 和 "AROLY.ttf" 字体作为测试字体。
注意:支持字体类型ttf和otf(两种字体类型都应该有效)
第二步:修改application-info.plist文件。 在新行中添加键 "Fonts provided by application",并将 "PermanentMarker.ttf" 作为新项添加到数组“Fonts provided by application”。
您的 plist 应该如下所示
现在该字体将在 Interface Builder 中可用。要在代码中使用自定义字体,我们需要通过名称来引用它,但名称通常与字体的文件名不同
现在,您可以从 viewController 访问自定义字体。我正在通过将 UIlabel 放置到 Storyboard 来测试字体,如下所示。
更新二: Working Solution
之后,导入您的自定义字体并更新您的 plist
。selectlabel
从您的 storyBoard
,转到 Label
下的 Attributes Inspector
>Text type
> select 到 Attributed
并从列表中选择您的 custom font
。
输出:
更新 1
如果您的自定义字体仍未在 Xcode font list
中列出。请检查与您的问题相关的 link
http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/
custom font not displaying on some simulator
注意: 不过,您可以通过编程方式将 BebasNeue
或 custom font
分配给您的标签或按钮等,即使它没有显示在您的 interface Builder
。如果您在设置对象字体时遇到问题 programatically.try 下面的方法。
为 UILabel 指定字体:
label?.font = UIFont(name: "BebasNeue", size: 35) // Set to any size
为 UIButton 指定字体:
button.titleLabel?.font = UIFont(name: "BebasNeue", size: 35)
为 UITextField 指定字体:
textField.font = UIFont(name: "BebasNeue", size: 25)
为 UINavigationBar 指定字体:
navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "BebasNeue", size: 25)!, NSForegroundColorAttributeName: UIColor.red]
为 UIToolBar 指定字体:
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "BebasNeue", size: 25.0)!], for: UIControlState.normal)
输出:
文件夹名称和字体名称之间可能存在差异解决方案是:
- 打印所有默认字体名称。(没有自定义字体)
- 向项目添加自定义字体。
- 打印所有字体名称。
然后比较字体名称。
func printFontsNames() {
let fontFamilyNames = UIFont.familyNames
for familyName in fontFamilyNames {
print("------------------------------")
print("Font Family Name = [\(familyName)]")
let names = UIFont.fontNames(forFamilyName: familyName )
print("Font Names = [\(names)]")
}
}
这是 old bug 自 Xcode 3.x:
there is a bug/known issue with IB on XCode 3.x with non-standard fonts and Interface Builder. Custom fonts generally need to be set programatically (via [UIFont fontWithName:])
有一些解决方法,例如 this 和 User Defined Runtime Attribute
和 categories
。
当使用相同的字体 (Bebas Neue) 时,我遇到了完全相同的问题:该字体未显示在 Plain
控件的字体列表中。
它适用于 Attributed
控件,如 Joes post 的更新 2 中所述,但您实际上是在更改 attributedText
而不是常规 text
,这可能会导致不良行为。例如,您必须 fiddle 和 NSMutableAttributedString
才能在运行时更改文本或文本颜色。
我对这个问题做了一些调查。我用了 FontLab Studio to modify the font and do some tests. I used Bebas Neue version 1.400 (dated September 15, 2014) from dafont.com.
- 可能是字体文件被损坏了。 Re-saved 作为 .otf 和 .ttf:没用。
- 可能字体的元数据已损坏。将所有字形复制到一种新字体并命名为 Bebas Neue:没有用。
- 我将字体从 Bebas Neue 重命名为 BN:有效! 但为什么呢?
- 也许您不能在字体名称中使用 "Neue"(因为 Helvetica Neue 是 iOS 系统字体,直到 iOS 8)。将字体重命名为 Test Neue:仍然有效。
- 也许你不能在字体名称中使用 "Bebas"?将字体重命名为 Bebas:仍然有效。
- 什么...只是为了确定,我将字体名称改回 Bebas Neue:再次不起作用。
- 我也试过 BebasNeue:也没用。
然后我把名字改成了 Bebas Neue Whatever: 它有效。
我真的不明白为什么会这样。 Apple 或 Xcode 不希望您在 Interface Builder 中使用 "Bebas Neue" 或 "BebasNeue" 吗? 我安装了正常的 Bebas Neue。也许引用已损坏? 我真的不知道。如果 Bebas Neue 在他们的 Xcode.
中工作,也许使用干净系统的人可以尝试无论如何,我实现了我的目标:能够将 Bebas Neue(我将最终版本命名为 "Bebas Neue MyAppName")用于 Plain
样式的标签和按钮,因此我可以设计我的应用程序 as-is 并且不必 fiddle 使用属性字符串。
您实际上可以直接进入属性字体,单击自定义字体 window。单击左上角的齿轮,然后单击选项管理字体。 window 应该弹出并在顶部,并且应该有一个加号以允许您添加字体。只需选择您下载的自定义字体,如 xyz.tff,然后应将其添加。
需要注意的重要一点是,ttf 文件应该在 p-list 以及您的项目目录中引用!
我有类似的问题
添加了自定义字体并将其分配给 UILabel
一切正常,但在几次之后它不会按预期工作。
尝试了所有解决方案,但对我没有任何作用。所以这是我的解决方案,再次转到以前的 UILabel
(已经有新添加的自定义字体) select->label->select 新添加的字体。检查其他 UI 控件字体。
现在一切正常。
希望这对新开发者有帮助...
现在简单易行- 在 Xcode 10 和 swift 5
中进行了测试将字体添加到 Xcode
的步骤Select 您的 UILabel、UITextField 或其他字体部分下的内容,然后按照
步骤 1
Select 字体选择屏幕左角的设置菜单。并选择字体管理器选项。
步骤 2
单击下面标记的添加按钮。
步骤 3
Select 包含您的字体的文件夹。它将被加载到 XCode 字体列表中。
将字体添加到项目的步骤
不要忘记使用关键字 Fonts provided by application
向您的 plist 添加描述,并将字体文件放入项目目标设置下的复制包资源中。
是的!就是这样..享受..
最后,我找到了 Bebas Neue 字体问题的根本原因。
我不记得我在哪里下载了字体,但是 Bebas Neue 字体 不一致。
下载 即应用程序名为 Typelight
打开非常规,但即 粗体 字体 Typelight
。
您需要更正大部分 Bebas Neue 字体。
这对我来说仍然是 Swift 4.2 的一个反复出现的问题,即使没有进行任何可能导致它的更改。
从 Xcode 项目中删除字体文件并重新添加它们可以解决问题(直到下一次)。
就我而言,Interface builder 中缺少一个字体系列,因为该系列中的一种字体未添加到项目中,但在 info.plist 文件中指明。
通常从项目中删除我所有的自定义字体并重新添加它们 - 解决了问题。
TLDR
在 Mac OS 中创建一个新用户帐户,然后在执行我在下面执行的所有步骤之前,看看您是否能够在新帐户中取得成功。事后看来,我可能只需执行第 7 步和第 11 步就可以省去数小时的麻烦。
问题
在不情愿地从 Mojave 升级到 Catalina 以便我可以 运行 最新但不是最好的版本 Xcode (11.5) 之后,我无法再 select 自定义来自界面生成器中 PLAIN 文本控件的字体选择器的字体。
正如其他人所提到的,属性文本工作正常,因为它使用系统字体选择器而不是“黑框/这些字体来自哪里???”使用纯文本时出现的选择器。
失败的步骤
我尝试了以下步骤但没有成功:
- 将字体文件重新添加到项目中,希望 Xcode 能够修复 link 到选择器从中加载的字体 table(仍然 不知道为什么选择器中有某些字体以及它在哪里 正在从中获取它们)。
- 使用多个终端命令重置 Mac OS 字体缓存,希望选择器从 OS 中损坏的字体缓存加载列表
- 通过在字体簿应用程序中选择
File > Restore Standard Fonts
重置系统字体 - 对着电脑尖叫,诅咒 Apple 变成这样
- 尝试在 OS 中安装字体以查看是否解决了任何问题,因为我记得几年前我 运行 进入类似的东西时它起作用了。
- 在 Internet 上搜索任何线索并尝试几乎所有似乎合理的方法。
- 创建了一个 b运行d 新的简单项目...仍然无法select 自定义字体...呃哦
请来大佬们
- 诅咒自己没有执行 Catalina 的干净安装,并决定从头开始重新安装 Catalina。
- 意识到我在重新安装之前使用 Time Machine 备份我的数据时犯了一个错误,因为它不会让我只带入我的数据文件。迁移助手要求导入库数据(恢复时选项变灰),我不想这样做......再次诅咒苹果和我自己,因为我知道这会咬我......正如我所怀疑的那样配置文件中有垃圾导致了这个(我是对的......见下文)
- 试图 select Xcode 中的字体,同时 运行 在迁移助手的导入帐户下...同样的问题...无法 select自定义字体
成功!!!
- 创建了一个新用户并在该帐户下创建了一个新的简单项目。答对了!!!我现在可以 select 一个字体了!!!在升级到 Catalina 期间,我的用户帐户不知何故损坏了