it-swarm.com.ru

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

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

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

202
Patricio Guerra

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

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

barTintColor ссылка на класс

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

@property(nonatomic, retain) UIColor *barTintColor

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

Наличие

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

Объявлен в
INavigationBar.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;
    }

EDIT Использование xib

enter image description here

313
Rajneesh071

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

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

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

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

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

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

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

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

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

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

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

22
zeezoo

Для Swift измените цвет панели навигации:

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

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

    self.title = "title"
    self.navigationController?.navigationBar.titleTextAttributes = [
        NSForegroundColorAttributeName : UIColor.whiteColor(),
        NSFontAttributeName : UIFont(name: "Futura", size: 30)!
    ]
13
William Hu

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

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

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

12
Kyle Greenlaw

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

navController.navigationBar.barTintColor = [UIColor barColor];
11
RFG

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

- (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];
    }
}
11
bbaassssiiee

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

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

9
pqsk

Чтобы завершить код 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];
}
4
CodeBrew

Добавьте только этот код в ваше 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
Darshan Kunjadiya
//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;
}
3
Dashony

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

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];
}
3
Salim
#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
Mubin Shaikh
- (void)viewDidLoad
{
    [super viewDidLoad];

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

Для цвета:

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

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

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

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

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

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

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
2
John