swift 4中的自定义字体导致致命错误:在展开Optional值时意外发现nil

问题描述 投票:1回答:4

我必须在我的应用程序中添加自定义字体。我在我的项目中添加了字体并列出了infolist。

 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)

UPDATE

我添加了目标,并检查了复制包资源都是正确的但仍然有同样的错误。

enter image description here enter image description here

info.plist

ios swift uifont
4个回答
1
投票

删除Regular for font,因为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

希望它会有所帮助。


0
投票

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

选择您的字体,然后从右侧面板检查目标

enter image description here


0
投票

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

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

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

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


0
投票

试试这些

  • 在项目中添加自定义文件,并在Build Phase中的Copy Bundle Resource中进行验证
  • 使用此功能,您可以检查项目中可用的字体。在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)]") } }
  • 如果您的自定义字体在打印字体列表中可用,那么您可以使用。
© www.soinside.com 2019 - 2024. All rights reserved.