Цвет заголовка навигационной панели iPhone - PullRequest
279 голосов
/ 01 марта 2009

Кажется, что заголовок панели навигации iOS по умолчанию белый. Есть ли способ изменить его на другой цвет?

Мне известен подход navigationItem.titleView с использованием изображения. Поскольку мои дизайнерские навыки ограничены, и я не смог получить стандартный глянцевый, я предпочитаю менять цвет текста.

Любое понимание будет высоко ценится.

Ответы [ 32 ]

11 голосов
/ 09 октября 2015

Swift Версия

Я обнаружил, что большинство из вас, ребята, представили ответы версии Objective_C

Я хотел бы реализовать эту функцию с помощью Swift для всех, кому она нужна.

В ViewDidload

1.Чтобы сделать NavigationBar, фон становится цветным (например: СИНИЙ)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2.Для того, чтобы фон NavigationBar становился изображением (например, ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3.Чтобы изменить заголовок панели навигации (например: [Шрифт: Futura, 10] [Цвет: Красный])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(подсказка 1: не забывайте знак "!" После UIFont)

(подсказка 2: есть много атрибутов текста заголовка, команда click «NSFontAttributeName» вы можете ввести класс и просмотреть keyNames и требуемые типы объектов)

Надеюсь, я смогу помочь!: D

10 голосов
/ 19 мая 2014

Используйте приведенный ниже код в любом методе view-контроллера viewDidLoad или viewWillAppear.

- (void)viewDidLoad
{
    [super viewDidLoad];

    //I am using UIColor yellowColor for an example but you can use whatever color you like   
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

    //change the title here to whatever you like
    self.title = @"Home";
    // Do any additional setup after loading the view.
}
9 голосов
/ 08 декабря 2013

Коротко и сладко.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
8 голосов
/ 22 октября 2010

Это мое решение, основанное на Стивенсе

Единственная реальная разница в том, что я настроил некоторую обработку для регулировки позиции, если в зависимости от длины текста, похоже, как в Apple это делает

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

Вы можете настроить значение 10 в зависимости от размера шрифта

6 голосов
/ 21 января 2011

Я столкнулся с проблемой, когда мои навигационные кнопки выбрасывали текст из центра (когда у вас есть только одна кнопка). Чтобы это исправить, я просто изменил размер кадра следующим образом:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
6 голосов
/ 24 мая 2012

Рекомендуется установить self.title, так как он используется при нажатии дочерних панелей навигации или отображении заголовка на вкладках.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}
6 голосов
/ 04 июня 2015

Это довольно старая ветка, но я думаю дать ответ для настройки цвета, размера и вертикального положения заголовка панели навигации для iOS 7 и выше

Для цвета и размера

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

для вертикального положения

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

Установить заголовок и присвоить словарь атрибутов

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
6 голосов
/ 27 мая 2011

Я настроил фоновое изображение панели навигации и элемент левой кнопки, а серый заголовок не соответствует фону. Тогда я использую:

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

чтобы изменить цвет оттенка на серый. И название теперь белое! Это то, что я хочу.

Надеюсь также помочь:)

5 голосов
/ 13 апреля 2017

Это работает для меня в Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
3 голосов
/ 30 ноября 2013

Обновление поста Алекса Р. Р. с использованием новых текстовых атрибутов iOS 7 и современной цели c для уменьшения шума:

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...