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

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

9 81

9 ответов:

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

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

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

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

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

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

[[UINavigationBar appearance] setBarTintColor:myColor];

синтаксис Swift:

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

Я просто положил, что в AppDelegate didFinishLaunchingWithOptions и он сохраняется на протяжении всего приложения

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

Свифт:

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

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

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

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

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

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

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