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共享的链接可能会解决您的问题。它表示删除wordregular
。只需使用OpenSans
。结果证明Maddy是正确的。Thanks Krunal为您输入。else正在被调用。我想知道为什么会这样,因为我添加了正确的字体。您可以共享字体(家族)吗文件或字体文件的来源。我可以用我的project@Nitish您已正确添加字体,但使用了错误的名称。请参阅我刚才在问题下发布的链接。@Nitish-rmaddy共享的链接可能会解决您的问题。它表示删除wordregular
。只需使用OpenSans
。结果证明Maddy是正确的。Thanks Krunal为您的输入。