Today Widget 中的自定义字体 iOS 总是 return nil

Custom font iOS in Today Widget always return nil

我试图将自定义字体添加到今天的扩展程序中,但 UIFont 总是 return nil.

步骤:

  1. 我将字体文件添加到 Today Widget 目标:

  1. 我检查字体文件是否在 Today Widget 包中:

  1. 我在 Today Widget 的 TodayViewController 中初始化了字体实例,但它总是 return nil:
- (void)viewDidLoad {
    [super viewDidLoad];
    UIFont* ft = [UIFont fontWithName:@"octicons-local" size:20];
}

我在主工程中用了同样的方法,得到了自定义字体。我该如何解决?

可能是因为您忘记在 .plist 文件中添加密钥。

将键 Fonts provided by application 添加到新行。为您添加的每种字体添加项目。

我遇到了同样的问题,通过安装字体解决了。所以这里是步骤:
在 Project Navigator 中右键单击您的 .otf 文件 -> 单击在查找器中显示 -> 双击查找器中的字体 window,您将在右下角看到 "install" 按钮,单击安装然后签入您的应用。

希望这有效。

我遇到了同样的问题,在我的例子中,在 plist 键 Fonts provided by application 下添加包括文件扩展名的完整文件名对我有用。

我在处理应用程序扩展时遇到了同样的问题。这里的一些答案帮助我解决了这个问题,但我想说清楚,也许其他面临与我相同问题的开发者更容易:

虽然字体在 App 中工作,但在扩展中却没有,这导致了崩溃,因为

UIFont(name: name.rawValue, size: size)

返回 nil

字体在应用程序本身的 Info.plist 文件中,但不在应用程序扩展的 Info.plist 文件中。因此,我不得不使用键 Fonts provided by application 手动向扩展程序的 Info.plist 添加一行,并输入应用程序 Info.plist 文件的所有字体,直到它们匹配为止。然后它对我有用。

我也遇到了这个问题,我做了 targeting font to my target 并将 fonts providing by application 放在 plist 中。但是当我试图检索字体时仍然得到 nil。

可能是你使用的字体名称有误

例如也是我遇到的问题

我拖入项目名称的字体是trenolt.otf

但是使用这个名字 UIFont(name: "trenolt", size: 14) 得到 nil

并根据 Adding a Custom Font to Your App By Developer Documentation

我打印出所有的字体系列和名称

for family in UIFont.familyNames.sorted() {
  let names = UIFont.fontNames(forFamilyName: family)
  print("Family: \(family) Font names: \(names)")
}

然后我进入控制台

["TruenoLt", "TruenoRg"]

现在使用打印名称

UIFont(name: "TruenoLt", size: 14)

获得

<UICTFont: 0x7fbc39a168b0> font-family: "Trueno"; font-weight: normal; font-style: normal; font-size: 14.00pt