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

91

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

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

Джонатан Турфт
источник

Ответы:

203

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

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

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
Себ Тибо
источник
Спасибо, вы знаете, как удалить белый градиент по умолчанию, который идет сверху, чтобы сделать его сплошным цветом?
Jonathan Thurft 09
1
С tintColorградиентом останусь. Если вы не хотите иметь этот градиент, вам нужно создать подкласс UINavigationBar ИЛИ, чтобы создать UIImage для внешнего вида.
Seb Thiebaud
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
Swift Version: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034
103

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

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
LJ1
источник
3
Это должен быть принятый ответ, отлично работает для iOS7.
joshuahornby10 07
Правильный ответ для iOS 7. У меня работает.
LondonGuy
Полупрозрачность - необходимое условие для работы. Поскольку принятый ответ не включает этого, это должен быть принятый ответ.
Тристан Уорнер-Смит
3
Чтобы уточнить, принятый ответ предназначен для AppDelegate, и это для контроллера представления.
Dean
@ Дин прав. Принятый ответ вступит в силу для вновь созданных UIViewControllers, а этот будет показывать эффекты при каждом вызове.
aramusss
19

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

[[UINavigationBar appearance] setBarTintColor:myColor];
Лассе Банк
источник
15

Синтаксис Swift:

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

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

Дастин Уильямс
источник
8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Хеманг
источник
6

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

ronm333
источник
Спасибо, я нашел много ссылок о том, как это сделать в ObjC и Swift, но никто не упомянул, что это доступно в IB
Ник,
3

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

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

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

e1985
источник
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];
Amar
источник
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

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

iOS
источник
-1

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

ганка
источник