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

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

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

Ответ 1

Поведение 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 IIS

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

enter image description here

Ответ 2

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

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

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

Where to make the necessary changes, including the result in iOS Simulator

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

Ответ 3

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

В приложении на основе навигации вы можете поместить код в 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];

Ответ 5

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

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

Измените (blueColor) на любой цвет.

Ответ 6

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

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

Ответ 7

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

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

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

Затем внутри "application doneFinishLaunchingWithOptions" поместите это:

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

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

Ответ 8

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

navController.navigationBar.barTintColor = [UIColor barColor];

Ответ 9

Если вам нужно поддерживать 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];
    }
}

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

Надеюсь, это поможет кому-то. Мне не нравились ответы, которые я видел. Мне нравится держать мой код как можно более чистым. Не сказать, что это неправильно делать это программно, но есть люди, такие как я.... это для вас, ребята. Changing color of the navigation bar

Ответ 11

Чтобы закончить код 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];
}

Ответ 12

Добавьте только этот код в 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]];
}

Ответ 13

//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;
}

Ответ 14

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

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

Ответ 15

#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]];
    }

Ответ 16

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

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

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

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

Ответ 17

- (void)viewDidLoad
{
    [super viewDidLoad];

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

Ответ 18

Цвет:

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

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

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