Подтвердить что ты не робот

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]]

4b9b3361

Ответ 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]