NSFontAttributeName已更改为String

时间:2014-10-26 12:18:28

标签: string swift uinavigationbar

我正在尝试正确设置导航栏的样式,我需要将字体更改为helvetica neue,大小为19.我曾经使用过此代码,但我注意到现在效果不好:

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)]

这是因为NSFontAttributeName的类型已更改为String,我已尝试使用

修复它
navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: "HelveticaNeue-Light, 19"]

但编译器继续给我一个与字体中的磅值相关的错误,我该如何解决?

3 个答案:

答案 0 :(得分:95)

UIFont构造函数返回一个必须解包使用的可选(UIFont?)。如果您确定自己拥有有效的字体名称,请添加!

Swift 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Light", size: 19)!]

Swift 4:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Light", size: 19)!]

斯威夫特3:

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)!]

注意:如果您在代码中设置了带有静态名称的字体,那么一旦您确认使用了有效的字体名称,强制解包是安全的。如果您从外部源(用户或服务器)获取字体名称,则需要使用可选绑定,例如if let font = UIFont(...guard let font = UIFont(...来安全地打开使用前的字体。

答案 1 :(得分:50)

使用 Swift 4 不推荐使用NSFontAttributeName,您可以使用NSAttributedStringKey值来设置属性。

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: fontStyle]
}

Swift 4.2 NSAttributedStringKey更改为NSAttributedString.Key

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: fontStyle]
}

有关NSAttributedStringKey的更多选项,您可以访问此链接https://developer.apple.com/documentation/foundation/nsattributedstringkey/

答案 2 :(得分:0)

Swift 4.2

NSAttributedStringKey在Swift 4.2中已重命名为NSAttributedString.Key

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: fontStyle]
}