Как изменить цвет панели навигации в 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

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

Rajneesh071
источник
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

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

alondono
источник
Выбор черного для 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
pNre
источник
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) на любой цвет, который вы хотите.

zeezoo
источник
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];
    }
}
bbaassssiiee
источник
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
Я думаю, что это самый прямой ответ! Спасибо
Испас Клавдиу
Нет проблем. Рад, что это все еще полезно
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];
}
CodeBrew
источник
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;
}
Dashony
источник
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];
}
MaxEcho
источник
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
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Гаурав Гилани
источник
3

Для цвета:

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

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

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];

источник