我想更改导航栏标题中的字符间距。我正在尝试使用以下代码。
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中改变导航栏标题中的字符间距?
答案 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
答案 1 :(得分:1)
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
请记住“属性”字典中的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