自定义字体在 swift 3 中变为 nil 值

custom font becomes a nil value in swift 3

我想将 attributedstring 设置为我的 UILabel。所以我是这样定义属性的。

let attribute1:[String:Any]=[
        NSForegroundColorAttributeName: UIColor.init(colorLiteralRed: 120.0/255, green: 173.0/255, blue: 194.0/255, alpha: 1.0),
        NSFontAttributeName:UIFont.init(name: "Bariol_Bold", size: 15.0)!]
let attributedStringGreeting=NSAttributedString.init(string: welcomeMessage, attributes: attribute1)

但我在行中收到此错误:

NSFontAttributeName:UIFont.init(name: "Bariol_Bold", size: 15.0)!]

这是否意味着我的自定义字体没有使用?但是当我从 IB 设置字体时它显示了。

fatal error: unexpectedly found nil while unwrapping an Optional value

我该如何解决这个问题?请帮助我。

试试这个

let attribute1:[String:Any] = [NSFontAttributeName: UIFont(name: "Bariol-Bold", size: 18)! ,
                NSForegroundColorAttributeName : UIColor.init(colorLiteralRed: 120.0/255, green: 173.0/255, blue: 194.0/255, alpha: 1.0)]

     let attributedStringGreeting=NSAttributedString.init(string: welcomeMessage, attributes: attribute1)

如果实际的字体名称与文件名不同,这通常会发生,所以问题是如何找到字体名称。

执行此步骤,

  1. 将所有字体文件添加到您的包中
  2. 在 info.plist 键下添加所有字体文件列表:"Font Provided By Application"
  3. 现在运行下面的代码,

    for fontFamilyName in UIFont.familyNames{
        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
            print("Family: \(fontFamilyName)     Font: \(fontName)") 
        }
    }
    
  4. 现在在你的控制台中看到输出,所有可用的字体都打印在这里,检查你提供的字体的实际字体名称。现在只需使用与下面相同的字体名称:

  5. 现在,将该字体名称用于 UIFont.init(name: "Actual Font name comes here", size: 15.0)!]

问题出在名字上。每次文件名和字体名都没有必要相似。要知道确切的字体名称,您可以使用以下函数。

func printMyFonts() {
    print("--------- Available Font names ----------")
    for name in UIFont.familyNames {
        print(name)
        print(UIFont.fontNames(forFamilyName: name))
    }
}

希望对您有所帮助!