我的导航栏大多是根据自己的喜好自定义的,但我正在尝试使用NSKernAttributeName
来增加字距调整。我正在使用外观代理将导航栏设置为白色文本和自定义字体,但是当我尝试添加字距时,它不会生效。
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], NSForegroundColorAttributeName,
[UIFont fontWithName:@"HelveticaNeue-Light" size:20.0], NSFontAttributeName,
[NSNumber numberWithFloat:2.0], NSKernAttributeName, nil]];
我是否需要做一些其他事情来添加一些不太常见的属性,如字距标签?
答案 0 :(得分:40)
根据文档,titleTextAttributes
UINavigationBar
仅允许您指定字体,文本颜色,文本阴影颜色和文本阴影偏移。
如果您想使用其他属性,可以使用所需的UILabel
创建NSAttributedString
,并将其设置为控制器titleView
的{{1}}
例如:
navigationItem
答案 1 :(得分:8)
我已经尝试了很多不同的方法来实现这一点,并且发现只能更改UINavigationBar的字体,文本颜色,文本阴影颜色和文本阴影偏移量,如上面的@JesúsA。Alvarez所说。
我已经在Swift中转换了代码并且它可以工作:
let titleLabel = UILabel()
let attributes: NSDictionary = [
NSFontAttributeName:UIFont(name: "HelveticaNeue-Light", size: 20),
NSForegroundColorAttributeName:UIColor.whiteColor(),
NSKernAttributeName:CGFloat(2.0)
]
let attributedTitle = NSAttributedString(string: "UINavigationBar Title", attributes: attributes as? [String : AnyObject])
titleLabel.attributedText = attributedTitle
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel
答案 2 :(得分:1)
针对 Swift 4
更新了上述答案我创建了一个超类,我定义了这个方法,你可以从你想要的每个子类调用它:
func setNavigationTitle(_ title: String, kern: CGFloat) {
let titleLabel = UILabel()
let attributes = [
NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 18),
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.kern: kern] as [NSAttributedStringKey : Any]
let attributedTitle = NSAttributedString(string: title, attributes: attributes)
titleLabel.attributedText = attributedTitle
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel
}
答案 3 :(得分:0)
我将上述答案转换为UIViewController扩展,以便将其整理掉。
Swift 3
extension UIViewController {
func setUpCustomTitleView(kerning: CGFloat) {
let titleLabel = UILabel()
guard let customFont = UIFont(name: "Montserrat-SemiBold", size: 18) else { return }
let attributes = [NSForegroundColorAttributeName: UIColor.gray,
NSFontAttributeName: customFont,
NSKernAttributeName: kerning] as [String : Any]
guard let title = title else { return }
let attributedTitle = NSAttributedString(string: title, attributes: attributes)
titleLabel.attributedText = attributedTitle
titleLabel.sizeToFit()
navigationItem.titleView = titleLabel
}
}
从视图控制器的viewDidLoad()调用扩展函数。
setUpCustomTitleView(kerning: 2.0)