Как изменить цвет фона 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]];
но я не работаю и не могу найти код где-либо, который работает в делегате приложения.
Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?
12 ответов
Ты можешь использовать [[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];
Быстрый синтаксис:
UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color
Я просто поместил это в AppDelegate didFinishLaunchingWithOptions, и оно сохраняется во всем приложении.
iOS 13.0 представила новый API для этого:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let myColor = UIColor(hue: 0.4, saturation: 0.25, brightness: 1, alpha: 1)
let barAppearance = UINavigationBarAppearance()
barAppearance.backgroundColor = myColor
let navigationBar = UINavigationBar.appearance()
navigationBar.standardAppearance = barAppearance
navigationBar.scrollEdgeAppearance = barAppearance // for scrollable content or large titles
return true
}
Свифт:
self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Вы можете легко сделать это с Xcode 6.3.1. Выберите панель навигации в структуре документа. Выберите инспектора атрибутов. Снимите флажок Прозрачный. Установите Bar Tint на нужный вам цвет. Готово!
Как упоминают другие ответы, вы можете использовать setTintColor:
, но вам нужен сплошной цвет, и это не возможно сделать настройку цвета оттенка AFAIK.
Решение состоит в том, чтобы создать изображение программным способом и установить это изображение в качестве фонового изображения для всех панелей навигации с помощью UIAppearance
, Что касается размера изображения, я не уверен, будет ли работать изображение размером 1х1 пиксель, или вам нужен точный размер навигационной панели. Проверьте второй ответ на этот вопрос, чтобы узнать, как создать изображение.
В качестве совета, я не люблю "перегружать" делегат приложения такими вещами. Я склоняюсь к созданию класса с именем AppearanceConfiguration
только с одним публичным методом configureAppearance
где я устанавливаю все необходимое для UIAppearance, а затем вызываю этот метод из делегата приложения.
In Swift 4.2 and Xcode 10.1
You can change your navigation bar colour from your AppDelegate directly to your entire project.
In didFinishLaunchingWithOptions launchOptions:
write below to lines of code
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
Here
tintColor is for to set background images like back button & menu lines images etc. (See below left and right menu image)
barTintColor is for navigation bar background colour
If you want to set specific view controller navigation bar colour, write below code in 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
Вы можете установить цвет фона 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.f Проблема в том, что преобразование с плавающей точкой работает неправильно. Попробуйте использовать точное значение с плавающей точкой.
Работа с UINavigationController и UINavigationBar в iOS доставляет много хлопот. К счастью, наличие сторонней библиотеки с открытым исходным кодом может легко решить эти проблемы, надеясь помочь всем.
Git-репозиторий: NXNavigationExtension
Изменить цвет UINavigationBar:
extension YourViewController {
override var nx_titleTextAttributes: [NSAttributedString.Key : Any]? {
return [NSAttributedString.Key.foregroundColor: .red]
}
}