Как установить кернинг (расстояние между символами) в заголовке UINavigationBar - Swift или Objective-C
У меня есть мой навигационный бар, в основном настроенный по моему вкусу, но я пытаюсь увеличить кернинг с помощью NSKernAttributeName
. Я использую прокси-сервер внешнего вида, чтобы установить навигационную панель в белый текст и собственный шрифт, но когда я пытаюсь добавить кернинг, он не вступает в силу.
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], NSForegroundColorAttributeName,
[UIFont fontWithName:@"HelveticaNeue-Light" size:20.0], NSFontAttributeName,
[NSNumber numberWithFloat:2.0], NSKernAttributeName, nil]];
Нужно ли мне что-то делать, чтобы добавить некоторые из менее распространенных атрибутов, таких как кернинг, на ярлык заголовка?
Ответы
Ответ 1
В соответствии с документацией, titleTextAttributes
of UINavigationBar
позволяет вам указать шрифт, цвет текста, цвет текста и теневое смещение текста.
Если вы хотите использовать другие атрибуты, вы можете создать UILabel
с нужным NSAttributedString
и установить его как titleView
для своего контроллера navigationItem
Например:
UILabel *titleLabel = [UILabel new];
NSDictionary *attributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0],
NSKernAttributeName: @2};
titleLabel.attributedText = [[NSAttributedString alloc] initWithString:self.navigationItem.title attributes:attributes];
[titleLabel sizeToFit];
self.navigationItem.titleView = titleLabel;
Ответ 2
Я пробовал много разных способов сделать это и обнаружил, что вы можете изменить шрифт, цвет текста, цвет теневого текста и смещение тени текста в UINavigationBar, как сказал выше, описанный выше, как сказал Хесус А. Альварес.
Я преобразовал код в 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
Ответ 3
Расширение UIViewController
Я преобразовал вышеупомянутые ответы в расширение 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)