Как изменить цвет фона UINavigationBar из AppDelegate

Я знаю, как изменить фоновое изображение 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]];, но я не работаю, и я не могу найти код в любом месте, который работает в делегате приложения.

Может ли кто-нибудь указать мне в правильном направлении?

Ответ 1

Вы можете использовать [[UINavigationBar appearance] setTintColor:myColor];

С iOS 7 вам нужно установить [[UINavigationBar appearance] setBarTintColor:myColor];, а также [[UINavigationBar appearance] setTranslucent:NO].

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

Ответ 2

Чтобы изменить цвет фона, а не оттенок, будет работать следующий фрагмент кода:

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

Ответ 3

Для этого в iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];

Ответ 4

Синтаксис Swift:

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

Я просто положил это в AppDelegate didFinishLaunchingWithOptions и он сохраняется во всем приложении

Ответ 5

Вы можете легко сделать это с помощью Xcode 6.3.1. Выберите навигационную панель в схеме документа. Выберите Инспектор атрибутов. Снимите флажок Полупрозрачный. Установите значение "Тень" на нужный цвет. Готово!

Ответ 6

Свифт:

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

Ответ 7

Как упоминают другие ответы, вы можете использовать setTintColor:, но вы хотите иметь сплошной цвет и не можете установить цвет оттенка AFAIK.

Решение состоит в том, чтобы создать изображение программно и установить это изображение в качестве фонового изображения для всех навигационных панелей через UIAppearance. Что касается размера изображения, я не уверен, что будет работать изображение размером 1x1 пиксель, или если вам нужен точный размер панели навигации. Проверьте второй ответ на этот вопрос чтобы увидеть, как создать изображение.

Как совет, мне не нравится "перегружать" делегата приложения этими типами вещей. Я стараюсь создать класс с именем AppearanceConfiguration только с одним открытым методом configureAppearance, где я устанавливаю все необходимые элементы UIAppearance, а затем я вызываю этот метод из делегата приложения.

Ответ 8

Вы можете установить цвет фона UINavigation, используя этот код в любом контроллере представления.

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

Ответ 9

Вы хотите установить tintColor.

Ответ 10

В 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

enter image description here

Ответ 11

Здесь присутствует цветовой код. Вместо использования 195/255 используйте 0,7647 или 195.f/255.f Проблема заключается в том, что преобразование float не работает должным образом. Попробуйте использовать точное значение float.