Цвет пользовательского статуса iOS Цвет фона не отображается
Я пытаюсь заполнить цвет фона строки состояния оранжевым, используя следующие
UINavigationBar.appearance().tintColor = UIColor.orangeColor()
UINavigationBar.appearance().barTintColor = UIColor.orangeColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Однако я получаю белую строку состояния, которая должна быть заполнена апельсином вместо этого примера: Настроить внешний вид навигационной панели с быстрым
Я устанавливаю это в файле AppDelegate.swift в didFinishLaunchingWithOptions, чтобы применить его ко всему приложению.
Я отредактировал свой info.plist следующим образом: View controller-based status bar appearance => NO
Кто-нибудь знает, что я делаю неправильно?
Изменить: я не уверен, имеет ли значение, но представление находится в UITabBarController
Изменить 2: это происходит во всех представлениях, а не только в UITabBarController.
Редактировать 3: Спасибо @Утсав Парих
Я добавляю представление теперь поверх строки состояния, и он на короткое время, пока приложение загружает строку состояния, является оранжевым, но, как только он заканчивает загрузку, он отключается и заменяется общей белой статусной полосой,
Почему это происходит?
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0))
view.backgroundColor=UIColor.orangeColor()
self.window!.rootViewController!.view.addSubview(view)
Изменить для Swift 3:
с UITabBarController
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
view.backgroundColor = .orange
self.view.addSubview(view)
Без встроенных контроллеров
Я понимаю, что некоторые люди приходят сюда не только для строки состояния, но и на панели навигации, поэтому я узнал несколько трюков на пути к этому без каких-либо встроенных контроллеров:
Добавьте этот метод в свой AppDelegate.swift и вызовите его в doneFinishLaunchingWithOptions
func customizeAppearance() {
UINavigationBar.appearance().barTintColor = UIColor.black
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UITabBar.appearance().barTintColor = UIColor.black
let tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
UITabBar.appearance().tintColor = tintColor
}
Ответы
Ответ 1
Изменить для Swift 3:
С UITabBarController
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
view.backgroundColor = .orange
self.view.addSubview(view)
Без встроенных контроллеров
Я понимаю, что некоторые люди приходят сюда не только для строки состояния, но и на панели навигации, поэтому я узнал несколько трюков на пути к этому без каких-либо встроенных контроллеров:
Добавьте этот метод в свой AppDelegate.swift и вызовите его в doneFinishLaunchingWithOptions
func customizeAppearance() {
UINavigationBar.appearance().barTintColor = UIColor.black
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UITabBar.appearance().barTintColor = UIColor.black
let tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
UITabBar.appearance().tintColor = tintColor
}
Благодаря @Utsav я добавил следующий подзаголовок в свой UITabBarController, и теперь это работает сейчас:
let view = UIView(frame:
CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0)
)
view.backgroundColor = UIColor.orangeColor()
self.view.addSubview(view)
UITabBarController не работает хорошо в AppDelegate. Если у кого-то есть лучший способ, дайте мне знать, но на данный момент это решение, к которому я пришел.
Ответ 2
Добавьте этот код в doneFinishLaunchingWithOptions в AppDelegate
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0))
view.backgroundColor=UIColor.orangeColor()
self.window.rootViewController.view.addSubview(view)
Надеюсь, это поможет вам....!!!
Ответ 3
Вот как я это сделал, не добавляя вид в VC с помощью NavBarController
Я хотел, чтобы цвет строки состояния был таким же, как цвет представления VC, поэтому я просто написал:
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.grayColor()
self.navigationController?.navigationBar.clipsToBounds = true
}
Попробуйте.
Ответ 4
Я думаю, что ваша последняя строка вернет ваши изменения, попробуйте следующее:
override func viewWillAppear(animated: Bool) {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
super.viewWillAppear(animated)
var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.orangeColor()
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
}
Ответ 5
После чего u сделал в info.plist
следующее: View controller-based status bar appearance
= > NO.
Добавьте этот код в AppDelegate.swift
файл под didFinishLaunchingWithOptions
:
var navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = uicolorFromHex(0xffffff)
navigationBarAppearace.barTintColor = uicolorFromHex(0x2E9AFE)
// change navigation item title color
navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
и вы можете выбрать любой шестнадцатеричный код для выбора цвета. Наслаждайтесь..!!
Извините, забыли использовать hexcode, вам это понадобится, поэтому добавьте этот код в любом месте вашего AppDelegate.swift
:
func uicolorFromHex(rgbValue:UInt32)->UIColor {
let red = CGFloat((rgbValue & 0xFF0000) >> 16)/256.0
let green = CGFloat((rgbValue & 0xFF00) >> 8)/256.0
let blue = CGFloat(rgbValue & 0xFF)/256.0
return UIColor(red:red, green:green, blue:blue, alpha:1.0)
}
Ответ 6
Симон отвечает быстрым 3
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
view.backgroundColor = .orange
self.view.addSubview(view)
Есть один другой способ, который я знаю, который использует private api. Это имеет некоторые преимущества при изменении ориентации и клавиатуре, а просмотр - вверх. Я использовал его и повезло каждый раз (приложение было выпущено в магазине приложений).
func setStatusBarBackgroundColor(color: UIColor) {
guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else { return }
statusBar.backgroundColor = color
}
Ответ 7
В tintColor
есть основное отличие и изменение цвета фона UINavigationBar
. Лучший способ, на мой взгляд, применить фоновое изображение, сделанное 1 пиксельным квадратным изображением только одного цвета.
Например:
let tabbarAndNavBarBkg = UIImage(named: "nav_tab")
UINavigationBar.appearance().setBackgroundImage(tabbarAndNavBarBkg, forBarMetrics: .Default)
Или вы можете создать категорию на UIColor
, чтобы вернуть UIImage
с учетом экземпляра UIColor
в objC:
+ (UIImage *) imageWithColor:(UIColor*) color {
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage *colorImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return colorImage;
}
Ответ 8
UINavigationBar.appereance()
работает для предстоящих viewControllers, но не отображается в настоящее время rootViewController. Для этого я добавил следующее к didFinishLaunchingWithOptions
:
UINavigationBar.appearance().tintColor = myColor
let navigationController = UIApplication.sharedApplication().windows[0].rootViewController as! UINavigationController
navigationController.navigationBar.barTintColor = myColor
navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : myTextColor]
navigationController.navigationBar.translucent = false
navigationController.setNeedsStatusBarAppearanceUpdate()
Ответ 9
Swift 3:
В вашем файле AppDelegate.swift вставьте следующий код в свой метод didFinishLaunchingWithOptions:
let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
view.backgroundColor = UIColor(red: 255/255, green: 130/255, blue: 0/255, alpha: 1.0) // Organge colour in RGB
self.window?.rootViewController?.view.addSubview(view)
Это отлично работает для меня!