更改导航栏标题swift中的字符间距

时间:2015-07-04 18:06:11

标签: ios swift

我想更改导航栏标题中的字符间距。我正在尝试使用以下代码。

let attributedString = NSMutableAttributedString(string: "New Title")
        attributedString.addAttribute(NSKernAttributeName, value:   CGFloat(1.4), range: NSRange(location: 0, length: 9))



        self.navigationItem.title = attributedString

这会出现以下错误:

无法将类型为'NSMutableAttributedString'的值分配给'string?'类型的值

有人可以帮我解决这个问题,还是建议在swift中改变导航栏标题中的字符间距?

3 个答案:

答案 0 :(得分:16)

您无法直接设置属性字符串。

你可以通过替换titleView

来做一个技巧
let titleLabel = UILabel()
let colour = UIColor.redColor()
let attributes: [NSString : AnyObject] = [NSFontAttributeName: UIFont.systemFontOfSize(12), NSForegroundColorAttributeName: colour, NSKernAttributeName : 5.0]
titleLabel.attributedText = NSAttributedString(string: "My String", attributes: attributes)
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel

enter image description here

答案 1 :(得分:1)

如何自定义UINavigationBar标题AttributedText

Swift 4.2版本:

    let titleLbl = UILabel()
    let titleLblColor = UIColor.blue

    let attributes: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: UIFont(name: "Noteworthy-Bold", size: 30)!, NSAttributedStringKey.foregroundColor: titleLblColor]

    titleLbl.attributedText = NSAttributedString(string: "My Title", attributes: attributes)
    titleLbl.sizeToFit()
    self.navigationItem.titleView = titleLbl

将产生类似于导航栏标题的波纹管: enter image description here

请记住“属性”字典中的NSAttributedStringKey.font属性遵循以下格式:

NSAttributedStringKey.font: UIFont(name: "FontNameILike-FontStyleILike", size: 30)!

FontName可以是您想要的任何东西,并且可以在iOS SDK(我使用过Noteworthy)中使用,某些标准字体样式(我使用过粗体)如下:

Bold, BoldItalic, CondensedBlack, CondensedBold, Italic, Light, LightItalic, Regular, Thin, ThinItalic, UltraLight, UltraLightItalic

我希望以下博文也能有所帮助(截至2018年9月19日,它仍然有效)https://medium.com/@dushyant_db/swift-4-recipe-using-attributed-string-in-navigation-bar-title-39f08f5cdb81

答案 2 :(得分:0)

Ashish Kakkad的回答是Swift 2的轻微失败。 使用NSString进行转换时出错。

所以正确的代码是:

let titleLabel = UILabel()
let colour = UIColor.redColor()
let attributes: [String : AnyObject] = [NSFontAttributeName:UIFont.systemFontOfSize(12), NSForegroundColorAttributeName: colour, NSKernAttributeName : 5.0]
titleLabel.attributedText = NSAttributedString(string: "My String", attributes: attributes)
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel