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

时间:2017-05-31 06:08:33

标签: ios swift uifont

我想将attributesstring设置为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中设置字体时,它会显示出来。

  

致命错误:在解包可选值时意外发现nil

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

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:8)

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

采取这一步骤,

  1. 添加捆绑包中的所有字体文件
  2. 在info.plist下的密钥下添加所有字体文件的列表:“应用程序提供的字体”
  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)!]

  6. 的字体名称

答案 1 :(得分:4)

问题在于名称。每次文件名和字体名称都不相似时。要知道确切的字体名称,可以使用以下函数。

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

希望这有帮助!

答案 2 :(得分:1)

试试这个

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)