Ios NSMutableAttributeString与自定义字体崩溃

Ios NSMutableAttributeString与自定义字体崩溃,ios,swift,uifont,nsmutableattributedstring,Ios,Swift,Uifont,Nsmutableattributedstring,这很奇怪 这项工作: titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14) attributedString.addAttribute(NSFontAttributeName, value: UIFont(name: "OpenSans-Bold", size: 18)!, range: ((attributedString.string as NSString).range(of: "Forgot your

这很奇怪

这项工作:

titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
attributedString.addAttribute(NSFontAttributeName, value:
    UIFont(name: "OpenSans-Bold", size: 18)!,
    range: ((attributedString.string as NSString).range(of: "Forgot your password? Reset it here")))
这项工作:

titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
attributedString.addAttribute(NSFontAttributeName, value:
    UIFont(name: "OpenSans-Bold", size: 18)!,
    range: ((attributedString.string as NSString).range(of: "Forgot your password? Reset it here")))
这不是。出现崩溃:

在展开可选值时意外发现nil

第一个示例显示OpenSans Regular在应用程序中运行良好。(与第三个示例中使用的字体相同)

第二个示例显示属性字符串可以很好地使用自定义字体

第三个示例显示自定义字体的属性字符串不起作用

我仔细检查了OpenSAN,并在项目中正确复制了以下内容:

项目目录:

复制捆绑资源:

Info.plist:


这将避免应用程序崩溃。UIFont的强制展开可能是应用程序崩溃的原因。试试看

if let openSansRegularFont18 = UIFont(name: "OpenSans-Regular", size: 18) {
   attributedString.addAttribute(NSFontAttributeName, value:
    openSansRegularFont18,
    range: ((attributedString.string as NSString).range(of: "Email or password are incorrect.")))
} else {
  print("OpenSans-Regular is nil (not installed/added in your project)")
  // Font file name differs from the actual font name.  Use font name as "OpenSans" only.
}

这将避免应用程序崩溃。UIFont的强制展开可能是应用程序崩溃的原因。试试看

if let openSansRegularFont18 = UIFont(name: "OpenSans-Regular", size: 18) {
   attributedString.addAttribute(NSFontAttributeName, value:
    openSansRegularFont18,
    range: ((attributedString.string as NSString).range(of: "Email or password are incorrect.")))
} else {
  print("OpenSans-Regular is nil (not installed/added in your project)")
  // Font file name differs from the actual font name.  Use font name as "OpenSans" only.
}

您只是没有正确添加名为“OpenSans常规”的字体

第一行,第二行:

titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
因为
titleLabel.font
是可选的,所以它对
UIFont(名称:“OpenSans常规”,大小:14)
的计算结果为零没有问题。因此,它不能证明
“OpenSans Regular”
的添加是正确的

然而,在第三个例子中:

attributedString.addAttribute(NSFontAttributeName, value:
    UIFont(name: "OpenSans-Regular", size: 18)!,
    range: ((attributedString.string as NSString).range(of: "Email or password are incorrect.")))
在这里,您强制展开它(注意
UIFont(名称:“OpenSans常规”,大小:18)!
的末尾),因此它崩溃了-另一方面,这证明您没有正确添加它

编辑

确保将“OpenSAN常规版”正确添加到项目中。我建议在这一点上检查一下列表,特别是检查点5(名称)

编辑2

正如@rmaddy指出的,
“OpenSans Regular”
“OpenSans”
-请参阅。因此,应使用:

titleLabel.font = UIFont(name: "OpenSans", size: 14)
以及:


您只是没有正确添加名为“OpenSans常规”的字体

第一行,第二行:

titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
因为
titleLabel.font
是可选的,所以它对
UIFont(名称:“OpenSans常规”,大小:14)
的计算结果为零没有问题。因此,它不能证明
“OpenSans Regular”
的添加是正确的

然而,在第三个例子中:

attributedString.addAttribute(NSFontAttributeName, value:
    UIFont(name: "OpenSans-Regular", size: 18)!,
    range: ((attributedString.string as NSString).range(of: "Email or password are incorrect.")))
在这里,您强制展开它(注意
UIFont(名称:“OpenSans常规”,大小:18)!
的末尾),因此它崩溃了-另一方面,这证明您没有正确添加它

编辑

确保将“OpenSAN常规版”正确添加到项目中。我建议在这一点上检查一下列表,特别是检查点5(名称)

编辑2

正如@rmaddy指出的,
“OpenSans Regular”
“OpenSans”
-请参阅。因此,应使用:

titleLabel.font = UIFont(name: "OpenSans", size: 14)
以及:



由于自定义字体的名称不正确或应用程序不支持自定义字体,此
UIFont(名称:“OpenSans Bold”,大小:18)
可能是
nil
。请使用
if let
执行代码以确保有效字体的可用性,并查看您得到的结果fyi-您作为名称传递给
UIFont的名称(名称:大小:)
通常与ttf文件的基本名称不同。请参阅和@maddy:事实证明您的文字是100%正确的。根据链接建议,它应该用作OpenSAN,而不是OpenSAN常规名称。请发布您的答案以供将来参考。此
UIFont(名称:“OpenSAN Bold”,大小:18)
可能为
nil
,原因可能是自定义字体的名称不正确,或者应用程序不支持自定义字体。如果let,请使用
执行代码,以确保有效字体的可用性,并查看您得到的结果fyi-您作为名称传递给
UIFont的名称(名称:大小:)
通常与ttf文件的基本名称不同。请参阅和@maddy:事实证明,您的文字是100%正确的。根据链接建议,它应该用作OpenSAN,而不是OpenSAN常规名称。请发布您的答案以供将来参考。我仔细检查了我的项目。字体复制正确。请检查我更新的问题。尝试此:
titleLabel.font=UIFont(名称:“OpenSans常规”,大小:14)!
-如果出现问题,添加字体时会出现问题。事实证明,maddy的观察是正确的。你的观察也是正确的。谢谢米兰。@Nitish没有问题,因为maddy没有发布他的答案,所以接受你的回答。我仔细检查了我的项目。字体复制正确。请检查我更新的问题。尝试以下操作:
titleLabel.font=UIFont(名称:“OpenSans Regular”,大小:14)!
-如果出现故障,添加字体时会出现问题。结果证明,maddy的观察是正确的。你的观察也是正确的。谢谢米兰。@Nitish没有问题,因为maddy没有发布他的答案,所以接受你的回答。其他人会接到电话。我想知道为什么,因为我正确添加了字体。你能分享字体(家庭)吗文件或字体文件的来源。我可以用我的project@Nitish您已正确添加字体,但使用了错误的名称。请参阅我刚才在问题下发布的链接。@Nitish-rmaddy共享的链接可能会解决您的问题。它表示删除word
regular
。只需使用
OpenSans
。结果证明Maddy是正确的。Thanks Krunal为您输入。else正在被调用。我想知道为什么会这样,因为我添加了正确的字体。您可以共享字体(家族)吗文件或字体文件的来源。我可以用我的project@Nitish您已正确添加字体,但使用了错误的名称。请参阅我刚才在问题下发布的链接。@Nitish-rmaddy共享的链接可能会解决您的问题。它表示删除word
regular
。只需使用
OpenSans
。结果证明Maddy是正确的。Thanks Krunal为您的输入。