Як змінити колір тла UINavigationBar з AppDelegate


90

Я знаю, як змінити UINavigationBarфонове зображення, виконуючи

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

і я знаю, як встановити для панелі різні кольори в кожному Views..... Тепер я хочу змінити колір тла, не використовуючи зображення на суцільний колір з app delegate. Я не хочу встановлювати його кожного разу з кожного перегляду, і я не хочу писати CGRect.

Я спробував, [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];але я не працюю, і я не можу знайти код в будь-якому місці, який працює в делегаті програми.

Чи може хтось, будь ласка, вказати мені в правильному напрямку?

Відповіді:


202

Можна використовувати [[UINavigationBar appearance] setTintColor:myColor];

З iOS 7 вам потрібно встановити [[UINavigationBar appearance] setBarTintColor:myColor];також [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Дякую, чи знаєте ви, як видалити білий градієнт за замовчуванням, який виходить зверху, щоб зробити його однотонним?
Джонатан Терфт

1
З tintColorградієнтом залишиться. Якщо ви не хочете мати цей градієнт, вам потрібно підкласувати ваш UINavigationBar АБО, щоб зробити UIImage для зовнішнього вигляду.
Себ Тібо

59
на iOS 7, який не працював, мені довелося скористатисяnavigationBar.barTintColor = myColor;
Хуан де ла Торре

4
translucentвластивість просто неможливо встановити, використовуючи UIAppearance в iOS 6 та iOS 7. Тож програма [[UINavigationBar appearance] setTranslucent:NO]призведе до аварійного завершення роботи NSInvalidArgumentException. Використовуйте [self.navigationController.navigationBar setTranslucent:NO]або скасовуйте вибір прозорості за допомогою IB.
Сем

1
Свіфт Версія: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

Щоб змінити колір фону, а не відтінок, буде працювати наступний фрагмент коду:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
Це повинна бути прийнята відповідь, ідеально працює для iOS7.
Джошуахорнбі10

Правильна відповідь для iOS 7. Працює у мене.
LondonGuy

Прозорість - це вимога, щоб зробити цю роботу. Оскільки прийнята відповідь не включає цього, це повинна бути прийнята відповідь.
Трістан Уорнер-Сміт

3
Тільки для уточнення, прийнята відповідь стосується AppDelegate, і це стосується контролера перегляду.
Дін

@Dean має рацію. Прийнята відповідь набуде чинності для нещодавно створеної UIViewControllers, тоді як ця відповідь відображатиме ефекти, коли буде викликано.
арамуси


15

Швидкий синтаксис:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Я просто помістив це в AppDelegate didFinishLaunchingWithOptions, і воно зберігається у всій програмі


8

Стрімкий :

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

6

Ви можете легко зробити це за допомогою Xcode 6.3.1. Виберіть панель навігації у структурі документа. Виберіть інспектор атрибутів. Зніміть прапорець напівпрозорий. Встановіть потрібний колір відтінку бар. Готово!


Дякую, я знайшов безліч посилань про те, як це зробити в ObjC і швидко, але ніхто не згадував, що це доступно в IB
Нік

3

Як зазначається в інших відповідях, ви можете використовувати setTintColor: , але ви хочете однотонний колір, і це неможливо зробити, встановивши колір відтінку AFAIK.

Рішення полягає в тому, щоб створити зображення програмним способом і встановити це зображення як фонове зображення для всіх навігаційних панелей через UIAppearance. Щодо розміру зображення, я не впевнений, чи буде працювати зображення розміром 1х1 піксель або вам потрібен точний розмір навігаційної панелі. Перевірте другу відповідь на це запитання щоб побачити, як створити зображення.

Як пораду, я не люблю «перевантажувати» делегата програми подібними речами. Я, як правило, хочу створити клас з іменем AppearanceConfigurationлише з одним загальнодоступним методом, configureAppearanceде я встановлюю всі речі UIAppearance, які я хочу, а потім викликаю цей метод від делегата програми.


2

Ви можете встановити колір тла UINavigation, використовуючи цей код у будь-якому контролері перегляду

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

У Swift 4.2 та Xcode 10.1

Ви можете змінити колір панелі навігації з AppDelegate безпосередньо на весь проект.

В didFinishLaunchingWithOptions launchOptions:запису нижче , щоб рядки коду

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Ось

tintColor призначений для встановлення фонових зображень, таких як кнопка назад, зображення рядків меню тощо (див. зображення зліва та справа в меню нижче)

barTintColor призначений для кольору тла панелі навігації

Якщо ви хочете встановити певний колір панелі навігації контролера перегляду, напишіть нижче код в viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

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


-1

Тут проблема в кольорі. Замість того, щоб використовувати 195/255, використовуйте 0.7647 або 195.f / 255.f. Проблема полягає в перетворенні поплавця, який не працює належним чином. Спробуйте використовувати точне плаваюче значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.