这很奇怪。
这有效:
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
attributedString.addAttribute(NSFontAttributeName, value:
UIFont(name: "OpenSans-Regular", size: 18)!,
range: ((attributedString.string as NSString).range(of: "Email or password are incorrect."))).
第一个示例显示OpenSans-Regular在应用程序中正常工作。 (第3个例子中使用相同的字体)。
第二个示例显示属性字符串可以正常使用自定义字体。
第三个示例显示带有自定义字体的属性字符串不起作用。
我仔细检查过,OpenSans-Regular我在我的项目中正确复制了:
项目目录:
复制捆绑资源:
Info.plist:
答案 0 :(得分:3)
这可以避免应用程序崩溃。强行解开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.
}
答案 1 :(得分:3)
您只是没有正确添加名称为"OpenSans-Regular"
的字体,
第一行,第一行:
titleLabel.font = UIFont(name: "OpenSans-Regular", size: 14)
有效,因为titleLabel.font
是可选的,因此将UIFont(name: "OpenSans-Regular", size: 14)
评估为nil没有问题。因此,它无法证明"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(name: "OpenSans-Regular", size: 18)!
),因此它会崩溃 - 另一方面证明你没有正确添加它。
修改强>
确保正确地将"OpenSans-Regular"
添加到项目中。我建议在blog entry处查看列表,特别是那里的5号检查点(名称)。
编辑2
正如@rmaddy所指出的,"OpenSans-Regular"
是"OpenSans"
- 请参阅this question。因此,请使用:
titleLabel.font = UIFont(name: "OpenSans", size: 14)
和
attributedString.addAttribute(NSFontAttributeName, value:
UIFont(name: "OpenSans", size: 18)!,
range: ((attributedString.string as NSString).range(of: "Email or password are incorrect.")))