【问题标题】:custom font becomes a nil value in swift 3自定义字体在 swift 3 中变为 nil 值
【发布时间】:2017-10-31 19:05:00
【问题描述】:

我想将属性字符串设置为我的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

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

【问题讨论】:

  • 试试Bariol-Bold
  • 实际字体名称与字体文件的文件名略有不同是很常见的。您需要确定加载字体的真实字体名称。
  • 这些字体的后记名称是什么?那就是要使用的那个。在 OS X 上的 FontBooks.app 中打开它们,或者在您的 iOS 应用中,遍历所有字体名称以找到它。
  • @Randi 你需要安装它,然后选择它,点击信息,然后你就会有后记名称。
  • @Randi:那里:stackoverflow.com/a/15985375/1801544(安装后)

标签: ios swift uifont


【解决方案1】:

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

采取这些步骤,

  1. 在您的包中添加所有字体文件
  2. 在 info.plist 中的 key 下添加所有字体文件的列表:“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)!] 的字体名称

【讨论】:

  • 这应该是例外的答案!
【解决方案2】:

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

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

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    试试这个

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多