Як змінити колір панелі навігації в iOS 7?


213

Як змінити колір панелі навігації в iOS 7?

В основному я хочу досягти чогось на кшталт Twitter Nav Bar (оновлений Twitter для iOS7цього є). Я вбудований в планку навпроти a view controller. Все, що я хочу, це змінити колір навігаційної смуги на світло-синій разом з панеллю корисності вгорі. Я не можу знайти варіант у своєму storyboard.



[[Вигляд UINavigationBar] setBarTintColor: [UIColor blackColor]]; ця робота працюватиме від ios 7 далі
Чандрамані

1
слідувати цей підручник appcoda.com/customize-navigation-status-bar-ios-7
Чандрамані

Відповіді:


319

В tintColoriOS 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 UI

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

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


3
але де я можу розмістити цей код ?? Я дуже новачок у цьому ха-ха. Я помістив його в делегата програми, і він, здається, не робить багато. Хоча це будується просто чудово.
Патрісіо Герра

1
всередині ViewController
Rajneesh071

1
Я поставив би це в viewDidLoad у вашому переглядіController.
HalR

2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Було б краще перевірити, на якій версії iOS ви працюєте, як це вказано у яблуці в посібнику з переходу: developer.apple.com/library/ios/documentation/userexperience/…
Девід Томпсон

1
Ви також можете використовувати, якщо ([self.navigationController.navigationBar odgovoriToSelector: @selector (setBarTintColor :)]) проти номера версії, щоб перевірити, чи можна встановити barTintColor
SimpsOff

129

Зробити те, що було задано оригінальним запитанням - щоб отримати старий Nav Bar на Twitter, блакитний фон з білим текстом - дуже просто зробити, просто використовуючи програму Interface Builder у Xcode.

  • Використовуючи контур документа, виберіть панель навігації.
  • У Інспекторі атрибутів у групі навігаційного рядка змініть стиль із стандартного на чорний. Це змінює колір тла панелей навігації та статусу на чорний, а текст - на білий. Тож акумулятор та інші значки та текст у рядку стану будуть виглядати білими під час роботи програми.
  • У тій же групі навігаційного рядка змініть відтінок бар на свій смак.
  • Якщо на панелі навігації є елементи кнопки смуги, вони все одно відображатимуть текст у синьому кольорі за замовчуванням, тому в інспекторі атрибутів, Переглянути групу, змініть відтінок на білий колір.

Це повинно отримати вам те, що ви хочете. Ось скріншот, за допомогою якого було б легше побачити, де вносити зміни.

Куди вносити необхідні зміни, включаючи результат в iOS Simulator

Зауважте, що зміна лише відтінку смуги не змінює колір тексту на навігаційній панелі чи рядку стану. Стиль також потрібно змінити.


Вибір чорного кольору для iOS 9 застарілий, будь-який шанс оновленої відповіді
Rob85

@ Rob85 Я зараз не перед Xcode, але коли Xcode 7 (з iOS 9) був випущений, я перевірив, що ці інструкції все ще актуальні. Переконайтесь, що вибрано панель навігації, чорний стиль повинен бути в інспекторі атрибутів навігаційної панелі.
алондоно

2
@ Rob85 Я перевірив сайт розробників Apple, і стилі , Defaultі Blackвсе ще доступні в прошивці 9. Застарілих з них BlackOpaqueі BlackTranslucent, які були замінені поєднанням Blackстилю і позначає напівпрозорий. UIBarStyle на веб-сайті розробника Apple
alondono

Вибачте @alondono, ви абсолютно правильні, я натискав на панель навігації на Контролері навігації, а не в конспекті документа, ось чому я не міг його бачити. Чорний, який я бачу застарілим, знаходився на імітованому рядку стану. Дякуємо за ваші відповіді
Rob85

@ Rob85 Класно! Дякую що дали мені знати.
алондоно

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
І куди саме я можу поставити цей код ?? Вибачте за питання новачків там ха-ха
Patricio Guerra

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
Samin

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 - колір смужки AND -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

Я думаю, що це найпростіша відповідь вперед! Thx
Ispas Claudiu

Нема проблем. Радий, що все-таки корисно
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 тощо
Pascal Bayer

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
Коллін Аллен


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.