swift 4中的自定义字体会产生致命错误:展开一个可选值时意外找到nil

时间:2019-04-03 04:25:40

标签: ios swift uifont

我必须向我的应用添加自定义字体。我在项目中添加了字体并列出了信息列表。

 enum Proxima: String {
        case regular = "Regular"
        func font(size: CGFloat) -> UIFont {
            return UIFont(name: "Proxima-\(rawValue)", size: size)!
        }
    }

致命错误:调用时解开包装可选值时意外发现nil

self.headTitle.font = UIFont.Proxima.regular.font(size: 30)

更新

我添加了目标,还检查了副本捆绑资源是否全部正确,但仍然出现相同的错误。

enter image description here enter image description here

info.plist

7 个答案:

答案 0 :(得分:1)

删除常规字体,因为iOS使用默认字体作为常规,请尝试修改代码并在此之后正常工作。

例如:

@IBOutlet weak var label1: UILabel!
enum OpenSans: String {
    case regular = ""
    case semiBold = "-Semibold"
    func font(size: CGFloat) -> UIFont {
        return UIFont(name: "OpenSans\(rawValue)", size: size)!
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib..

    label1.font = OpenSans.regular.font(size: 30.0)

    label1.font = OpenSans.semiBold.font(size: 30.0)
}

如果仍然有问题,请参考此演示项目

FontDemo

希望它会有所帮助。

答案 1 :(得分:0)

似乎您没有在目标中添加字体

选择字体,然后从右面板中检查目标

enter image description here

答案 2 :(得分:0)

尝试这些

  • 在项目中添加自定义文件,并在构建阶段在复制捆绑资源中进行验证

  • 使用此功能,您可以检查项目中可用的字体。在appDelegate中添加此函数,然后从didFinsihLaunching调用它。

    func printFonts() {
      let fontFamilyNames = UIFont.familyNames
      for familyName in fontFamilyNames {
          print("------------------------------")
          print("Font Family Name = [\(familyName)]")
          let names = UIFont.fontNames(forFamilyName: familyName)
          print("Font Names = [\(names)]")
        }
      }
    
  • 如果自定义字体在打印字体列表中可用,则可以使用。

答案 3 :(得分:0)

运行以下代码,检查项目中可用的字体。

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)") 
    }
}

在控制台中查看输出,所有可用字体都打印在此处,检查提供的字体的实际字体名称。

并为UIFont(name: "FontName", size: 15)使用该字体名称

答案 4 :(得分:0)

确保将文件添加到目标

此外,不要忘记将它们添加到Info.plist

的“应用程序提供的字体”部分中

答案 5 :(得分:0)

Xcode 11.1,iOS 13.1

我做对了所有事情,但字体列表中缺少一种自定义字体(通过UIFont.fontNames(forFamilyName: fontFamilyName))。

然后我将Info.plist(应用程序提供的字体)中缺少的字体重新排序到前面,并且可以正常工作。

也许这可以帮助某人。

答案 6 :(得分:0)

如果您按照此 Apple guide 操作仍然有问题,则最确定的问题是字体名称。要检查正确的字体名称,请在 Mac 上安装该字体,然后打开它。然后单击所需的字体,然后单击“i”图标以获取更多信息:

enter image description here

确保这是您在两者中使用的名称:

  • 信息.plist
  • 在您的枚举中(原始值)

enter image description here

enter image description here

PS:如果您尝试使用许可字体,则无法使用上述方法。我尝试使用 Bariol(废话!),但它无法识别它们。我假设有一种方法可以集成您的许可证,但我没有花时间去做,我只是改用了 Google 字体。