Как изменить цвет панели навигации в iOS 7?


213

Как изменить цвет панели навигации в iOS 7?

В основном я хочу достичь чего-то вроде панели навигации Twitter (обновленный Twitter для iOS7этого есть). Я встроил навигационную панель поверх view controller. Все, что я хочу, это изменить цвет панели навигации на светло-синий вместе с панелью утилит в верхней части. Я не могу найти вариант в моем storyboard.



[[UINavigationBar Внешний вид] setBarTintColor: [UIColor blackColor]]; это будет работать с IOS 7 и далее
Чандрамани

1
следовать этот учебник appcoda.com/customize-navigation-status-bar-ios-7
Чандрамани

Ответы:


319

Поведение tintColorдля баров изменилось в iOS 7.0. Это больше не влияет на фон бара.

Из документации:

Описание класса barTintColor

Цвет оттенка, применяемый к фону панели навигации.

@property(nonatomic, retain) UIColor *barTintColor

Обсуждение
Этот цвет по умолчанию становится полупрозрачным, если вы не установили свойство полупрозрачности в NO.

Доступность

Доступный в iOS 7.0 и позже.

Объявлено в
UINavigationBar.h

Код

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Мы также можем использовать это, чтобы проверить версию iOS, как упомянуто в Руководстве по переходу пользовательского интерфейса iOS 7

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

РЕДАКТИРОВАТЬ Использование XIB

введите описание изображения здесь


3
но где я могу разместить этот код ?? Я очень новичок в этом, ха-ха. Я поместил его в приложение-делегат, и, похоже, он мало что делает. Это строит просто отлично, хотя.
Патрисио Герра

1
внутри viewController
Rajneesh071

1
Я бы положил это в viewDidLoad в вашем viewController.
HalR

2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Было бы лучше проверить, на какой версии iOS вы работаете, как указано Apple в руководстве по переходу: developer.apple.com/library/ios/documentation/userexperience/…
Дэвид Томпсон

1
Вы также можете использовать if ([self.navigationController.navigationBar responsedsToSelector: @selector (setBarTintColor :)]) против номера версии, чтобы проверить, можно ли установить barTintColor
SimpsOff

129

Выполнить то, что задал первоначальный вопрос - чтобы получить старый вид навигационной панели Twitter, синий фон с белым текстом - очень легко сделать, просто используя Interface Builder в Xcode.

  • Используя схему документа, выберите панель навигации.
  • В Инспекторе Атрибутов в группе «Панель навигации» измените Стиль с По умолчанию на Черный. Это меняет цвет фона строк навигации и состояния на черный, а их текст - на белый. Таким образом, батарея и другие значки и текст в строке состояния будут выглядеть белыми при запуске приложения.
  • В той же группе «Панель навигации» измените оттенок панели на цвет по своему вкусу.
  • Если у вас есть элементы панели кнопок на панели навигации, они по-прежнему будут отображать их текст по умолчанию в синем цвете, поэтому в Инспекторе атрибутов, группа «Просмотр», измените оттенок на белый цвет.

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

Где внести необходимые изменения, в том числе результат в iOS Simulator

Обратите внимание, что изменение только оттенка не меняет цвет текста на панели навигации или в строке состояния. Стиль также должен быть изменен.


Выбор черного для iOS 9 устарел, любой шанс обновленного ответа
Rob85

@ Rob85 Я сейчас не нахожусь перед Xcode, но когда был выпущен Xcode 7 (с iOS 9), я убедился, что эти инструкции все еще актуальны. Убедитесь, что выбрана панель навигации, черный стиль должен быть в инспекторе атрибутов панели навигации.
alondono

2
@ Rob85 Я проверил веб-сайт Apple для разработчиков, стили Defaultи Blackвсе еще доступны в iOS 9. Устаревшие версии - это BlackOpaqueи BlackTranslucent, которые были заменены комбинацией Blackстиля и полупрозрачной галочки. UIBarStyle на сайте разработчика Apple
alondono

Извините @alondono, вы абсолютно правы, я нажимал на панель навигации на контроллере навигации, а не на схеме документа, поэтому я не мог его увидеть. Черный цвет, который я вижу устаревшим, был в строке имитированных показателей-> статус. Спасибо за ваши ответы
Rob85

@ Rob85 Круто! Спасибо, что дал мне знать.
alondono

76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color

4
И где именно я могу поставить этот код ?? Извините за вопрос новичка, ха-ха,
Патрисио Герра

1
код можно поместить в метод - (void) viewDidLoad контроллера навигации
pNre

2
В iOS 9 установка черного цвета для barTintColor приведет к тому, что время, имя устройства и батарея также станут черными, поэтому вы не сможете их видеть. Чтобы избежать этого, вместо использования barTintColor используйте self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff

46

В приложении на основе навигации вы можете поместить код в AppDelegate. Более подробный код может быть:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];

6
добавить [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];для iOS 7
Самин

24

В viewDidLoad, установите:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Измените ( blueColor) на любой цвет, который вы хотите.


18

Для быстрого изменения цвета панели навигации:

self.navigationController?.navigationBar.barTintColor = UIColor.red

изменить шрифт заголовка, размер, цвет:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]

14

В iOS 7 вы должны использовать свойство -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];

13

Если вы хотите использовать шестнадцатеричный код, вот лучший способ сделать это.

Сначала определите это в верхней части вашего класса:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Затем внутри «приложения didFinishLaunchingWithOptions» поместите это:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Поставьте шестнадцатеричный код вместо 00b0f0.


1
[UINavigationBar внешний вид] был очень полезным.
Кен

11

Если вам нужно поддерживать ios6 и ios7, то вы получите именно этот светло-голубой цвет, используя это в вашем UIViewController :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}

3
В iOS 7: -self.navigationController.navigationBar.barTintColor - это цвет панели И -self.navigationController.navigationBar.tintColor - цвет текста кнопок (назад, готово ...).
IgniteCoders

10

Это на самом деле проще, чем ответы, которые я видел здесь:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Надеюсь, это кому-нибудь поможет. Мне не понравились ответы, которые я видел. Мне нравится, чтобы мой код был максимально чистым. Не сказать, что это неправильно делать программно, но есть люди вроде меня ... это для вас, ребята. Изменение цвета панели навигации


Спасибо, я изменился несколько месяцев назад во время игры и не мог понять, как изменить это обратно!
Симметричный

Нет проблем, рад, что смог кому-то помочь
pqsk

Я думаю, что это самый прямой ответ! Спасибо
Испас Клавдиу

Нет проблем. Рад, что это все еще полезно
pqsk

5

Чтобы завершить код Rajneesh071, вы также можете установить цвет заголовка навигационной панели (и шрифт, если хотите), поскольку поведение по умолчанию изменилось с iOS 6 на 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}

5

Добавьте только этот код в ваш ViewContorller или в вашAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}

4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}

4

В приложении на основе навигации вы можете изменить цвет

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}

1
Изменение свойства tintColor в iOS7 больше не приводит к изменению цвета фона баров. Цвет оттенка в iOS7 влияет только на цвет текста BarButtonItems и т. Д.
Паскаль Байер

4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }

3

Этот вопрос и эти ответы полезны. С их помощью я смог установить желаемый темно-синий navigationBarцвет с белым заголовком и текстом кнопки.

Но мне также нужно было изменить часы, несущую, уровень сигнала и т. Д. На белый. Черный просто недостаточно контрастировал с темно-синим.

Я , возможно , упустил из вида , что решение в одном из предыдущих ответов, но я был в состоянии сделать это изменение, добавив следующую строку в мой верхний уровень viewController«s viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContentработает, но это , кажется , правильное перечисление для setBarStyle:этоUIBarStyleBlack
Collin Allen


3

Для цвета:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Для изображения

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.