2010-10-30 1 views

ответ

14

Название вида может быть любым видом. Так что просто создайте UILabel или что-то еще, где вы измените шрифт и присвоите этому новому виду свойство title элемента навигации.

+0

Это отличная идея, но у меня есть проблема сейчас, .. Когда я добавляю мой UILabel мои элементы управления (например, AddButton) на UINavigationController не видно больше , .. * hm * –

+0

Я исправил его, сам .. извините пропущенный;) –

+1

если это исправлено, не забудьте принять решение, указанное в ответе – Erik

10

Пример:

-(void) viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    CGRect frame = CGRectMake(0, 0, 400, 44); 
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [FontHelper fontFor:FontTargetForNavigationHeadings]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor whiteColor]; 
    label.text = self.navigationItem.title; 
    // emboss in the same way as the native title 
    [label setShadowColor:[UIColor darkGrayColor]]; 
    [label setShadowOffset:CGSizeMake(0, -0.5)]; 
    self.navigationItem.titleView = label; 
} 
+0

+1 для этого. Если viewControllers в стеке требуют другого шрифта для заголовка, тогда '[внешний вид UINavigationBar]' не может выполнить эту работу. Пользовательский titleView - единственный метод. – BabyPanda

+4

его лучше поместить этот код в viewDidLoad, иначе каждый раз, когда представление появляется в иерархии, будет создано titleView и его ненужная работа в системе – raw3d

71

С прошивкой 5 вы можете изменить шрифт через внешний вид прокси.

https://developer.apple.com/documentation/uikit/uiappearance

Ниже будет установить название шрифта для всех UINavigationControllers.

NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]]; 
    [titleBarAttributes setValue:[UIFont fontWithName:@"Didot" size:16] forKey:NSFontAttributeName]; 
    [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes]; 

Чтобы установить шрифт для кнопки назад, сделайте следующее:

NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary: [[UIBarButtonItem appearance] titleTextAttributesForState:UIControlStateNormal]]; 
    [attributes setValue:[UIFont fontWithName:@"Didot" size:12] forKey:NSFontAttributeName]; 
    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
+4

iOS 7 отказывается от ключа: UITextAttributeFont (читайте, не используйте это) и теперь вместо этого использует ключ: NSFontAttributeName. Делает чудеса и заставляет мое приложение выглядеть намного лучше. Благодаря! –

+1

В каждом отдельном контроллере просмотра вы также можете установить атрибуты текста заголовка в экземпляре текущей панели навигации, чтобы настроить внешний вид там, например, этот фрагмент кода: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSFontAttributeName: [UIFont fontWithName: @ " Palatino-Bold "размер: 28], NSForegroundColorAttributeName: [UIColor whiteColor]}]; – CodePlumber

18

для iOS8 + вы можете использовать:

[self.navigationController.navigationBar setTitleTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:18.0f], 
                    NSForegroundColorAttributeName: [UIColor whiteColor] 
                    }]; 
+3

Спасибо, что дал мне правильное направление для реализации пользовательского шрифта с быстрым: self.navigationController? .navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont (имя: «MyFont», размер: 18.0)!] – NBoymanns

+0

Спасибо, приятель! Решил. – Felipe

+2

Всегда грустно, когда пытаешься сначала все вышеперечисленные ответы, чтобы узнать нижний, самый современный из них: – hashier

1

Ответ от @morgancodes будет установить шрифт для всех UINavigationController. Я обновил его для Swift 4:

let attributes = [NSAttributedStringKey.font: UIFont(name: "Menlo", size: 14) as Any] 
UINavigationBar.appearance().titleTextAttributes = attributes 
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, for: .normal)