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