TitleTextAttributes шрифт UIAppearance в iOS 7
Я использую UIAppearance для применения шрифтов к UINavigationBar и UIBarButtonItem, и у меня возникают проблемы. Я запустил этот код:
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil]
setTitleTextAttributes:
@{NSFontAttributeName : [UIFont fontWithName:@"My_Font" size:17.0]}
forState:UIControlStateNormal];
NSLog(@"%@", [[UIBarButtonItem appearanceWhenContainedIn:
[UIToolbar class], nil] titleTextAttributesForState:UIControlStateNormal]);
и результат этого журнала на iOS 7:
(null)
Где результат в iOS 6:
{
NSFont = "<UICFFont: 0x1d897a80> font-family: \"My_Font\"; font-weight: normal; font-style: normal; font-size: 17px";
}
Я не могу найти что-либо в документах iOS 7, которые указывали бы, что это не должно работать, имеет ли кто-нибудь еще эту проблему?
Изменить 1
Я действительно получил это, чтобы работать с [UINavigationBar appearance]
, проблема заключалась в том, что я установил размер точки равным 0, чтобы шрифт был установлен на размер по умолчанию navbar/barButtonItem по умолчанию, как описано в Ссылка NCCtring UIKit дополнений, но это, видимо, больше не работает в iOS 7. Вместо этого установка размера точки на 0 вернет системный шрифт.
Я все еще не могу установить titleTextAttributes
в
[UIBarButtonItem appearanceWhenContaintedIn:[UIToolbar class], nil]]
Ответы
Ответ 1
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
fontWithName:@"YOURFONT" size:14], NSFontAttributeName,
[UIColor whiteColor], NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
Ключ должен использовать NSFontAttributeName и т.д. Я предполагаю, что они переходят к использованию сорта NS для 64-битной совместимости. Этот код работал на моем устройстве iOS7.
Ответ 2
После ответа @Alex Zavatone - это можно сделать красиво только в одной строке кода:
self.navBar.titleTextAttributes = @{
NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0],
NSForegroundColorAttributeName: [UIColor redColor]
};
Ответ 3
Это отлично работало для iOS 7, когда я переместил его в метод viewDidLoad в моем контроллере представления.
[[UIBarButtonItem appearance] setTitleTextAttributes:attributes];
Когда я попытался сделать это в AppDelegate, это не сработало, хотя [[UINavigationBar appearance] setTitleTextAttributes:setTitleTextAttributes:attributes];
отлично работал в AppDelegate. Также он должен идти, прежде чем создавать и назначать кнопку панели.
Он также работает от метода initWithCoder, если вы создаете свою кнопку на Storyboard.
Update:
Если вы измените цель развертывания на 7.0, тогда Xcode предоставит вам предупреждения, в которых указано, что UITextAttributeTextColor устарел, и вы должны использовать NSForegroundColorAttributeName или вместо UITextAttributeFont использовать NSFontAttributeName. После изменения констант атрибута вы можете вызвать setTitleTextAttributes: из AppDelegate.
Ответ 4
Вот что я делаю на iOS-7
UIColor *red = [UIColor colorWithRed:165.0f/255.0f green:1.0f/255.0f blue:0.0f/255.0f alpha:1.0];
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:24.0f];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:font forKey:NSFontAttributeName];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navBar.titleTextAttributes = navBarTextAttributes;
Ответ 5
Здесь он находится в Swift:
let font = UIFont(name: "My_Font", size: 17.0)
UINavigationBar.appearance().titleTextAttributes = [
NSForegroundColorAttributeName: UIColor.whiteColor(),
NSFontAttributeName: font!
]
* Обратите внимание, что вам нужно развернуть дополнительный UIFont.
Ответ 6
Для UIBarButons используйте внешний прокси-сервер:
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica Neue" size:fontSize], UITextAttributeFont,
nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
forState:UIControlStateNormal];
Если вы хотите ограничить какие UIBarButtonItems ваш стиль влияет на использование outerWhenContainedIn: вместо этого.
Для UINavigationBar вы можете создать UILabel и установить его в свой файл navigationItem.titleView:
UIabel *title = [[UILabel alloc] initWithFrame:CGRectZero];
title.backgroundColor = [UIColor clearColor];
title.font = [*yourfont*];
title.textColor = [*your color*];
self.navigationItem.titleView = title;
Ответ 7
Вот как глобально изменить цвет текста заголовка панели навигации в Swift 4:
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.yellow]