Як змінити колір тла 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.