String NSFontAttributeName已更改为字符串

String NSFontAttributeName已更改为字符串,string,swift,uinavigationbar,String,Swift,Uinavigationbar,我正在尝试正确设置导航栏的样式,我需要将字体更改为helvetica neue,大小点为19。我曾经使用过这段代码,但我注意到现在不起作用: navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)] 发生这种情况是因为NSFontAttributeName的类型已更改为String,我已尝试使用 na

我正在尝试正确设置导航栏的样式,我需要将字体更改为helvetica neue,大小点为19。我曾经使用过这段代码,但我注意到现在不起作用:

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)]
发生这种情况是因为NSFontAttributeName的类型已更改为String,我已尝试使用

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

但是编译器继续给我一个与字体中的点大小相关的错误,我如何修复它?

构造函数返回一个可选(
UIFont?
)你必须打开它才能使用。添加
如果您确定有有效的字体名称:

Swift 4.2:

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

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

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

注意:如果在代码中使用静态名称设置字体,则在验证使用的字体名称有效后,强制展开是安全的。如果您是从外部源(用户或服务器)获取字体名称,则需要使用可选绑定,例如
If let font=UIFont(…
guard let font=UIFont)(…
在使用前安全地展开字体。

如果不推荐使用Swift 4NSFontAttributeName,则可以使用NSAttributedStringKey值设置属性

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: fontStyle]
}
使用Swift 4.2
NSAttributedStringKey
更改为
NSAttributedStringKey.Key

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

有关NSAttributedStringKey的更多选项,您可以访问此链接

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

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

谢谢!正是我想要的!