【问题标题】:Custom Fonts Bug自定义字体错误
【发布时间】:2018-03-18 04:57:16
【问题描述】:

TL;DR:在 Storyboard/xib 中使用自定义字体之前,无法以编程方式使用它们。

注意:我检查了this,尝试了答案,但没有奏效。我还确保他们是目标成员。

我在将段控件标题更改为自定义字体时发现了一个奇怪的错误:

segmentedControl.titleTextAttributes = NSDictionary(objects: [UIFont.init(name: "Comfortaa-Regular",
                                                                          size: UIFont.systemFontSize)!,
                                                              UIColor.white],
                                                    forKeys: [NSAttributedStringKey.font as NSCopying,
                                                              NSAttributedStringKey.foregroundColor as NSCopying]) as? [AnyHashable : Any]

找不到字体,因此解包失败。但字体可以在情节提要中看到。

已正确添加到项目中,这里是 CopyBundle 和 InfoList:

所以这就是问题所在;如果我在情节提要中使用它,它会显示在字体系列中:

但如果没有,它就不显示了——这里我改成了浅色,粗体消失了——,不能以编程方式使用。

我使用的是 Xcode 版本 9.0 (9A235) 和 Swift 4。我还检查了 OpenRadar,但找不到关于此的提交。

提到的字体:Comfortaa

【问题讨论】:

  • 我对不同的字体有同样的问题。而且我还多次检查了所有步骤。除非在某处添加到情节提要中,否则字体不起作用。 (Xcode 10)

标签: ios swift xcode9


【解决方案1】:

@EDUsta,我刚刚尝试使用给定的字体,它的工作正常,没有问题,给出我遵循的步骤:

  1. Comfortaa-Bold.ttfComfortaa-Light.ttfComfortaa-Regular.ttf字体文件添加到项目中。

2.在info.plist文件中添加Fonts条目

确保项目目标中添加的字体。

之后,使用下面给出的Swift 代码在UILabelUISegmentedControl 上应用字体:

   let fontFirst = UIFont(name: "Comfortaa-Bold", size: 16.0)!
    segmentFont.setTitleTextAttributes([NSAttributedStringKey.font : fontFirst, NSAttributedStringKey.foregroundColor : UIColor.red],
                                       for: .normal)

    labelBold.font = UIFont(name: "Comfortaa-Bold", size: 16.0)
    labelLight.font = UIFont(name: "Comfortaa-Light", size: 16.0)
    labelRegular.font = UIFont(name: "Comfortaa-Regular", size: 16.0)

效果很好,您可以查看下面的截图:

为了您的参考,我添加了完整的项目here:

【讨论】:

  • 我已经意识到应用程序提供的字体项需要在您提供的项目中进行扩展!所以现在已经修复了,但我仍然很好奇将它们添加到情节提要后它是如何工作的......
  • @EDUsta info.plist 包含我们提供给 App 的字体文件列表,如果我们要添加字体名称如“Comfortaa-Bold.ttf”的字体文件,但未在info.plist 文件则无法通过编程方式加载相同的字体,但使用 IB 我们通过添加到目标的文件名提供字体,这样无需在 info.plist 文件中指定列表。
【解决方案2】:

我也有同样的问题。我无法以编程方式添加完全相同的字体系列(Comfortaa) - 每次它崩溃时,但是一旦我在启动屏幕中添加标签并将字体设置为 Comfotaa-Bold,从代码加载的字体工作正常并且不会崩溃。所以我的解决方案是在启动屏幕中添加 3 个带有字体的标签,例如 - Comfortaa Bold、Comforta Regular、Comforta Light,并将“隐藏”标志设置为 true。这样我就能够以编程方式使用它们。

【讨论】:

  • 我也是这样做的,目前我需要在 Storyboard 中使用 10 多个标签,但现在就足够了。
猜你喜欢
  • 2022-12-11
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2012-04-02
  • 2012-06-01
  • 2014-11-22
相关资源
最近更新 更多