iOS
Изменить цвет строки состояния
Поиск…
Для баров статуса не-UINavigationBar
- В настройке info.plist
View controller-based status bar appearance
наYES
- В виду, что контроллеры, не содержащиеся в
UINavigationController
реализуют этот метод.
В Objective-C:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
В Свифт:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Для баров статуса UINavigationBar
Подкласс UINavigationController и затем переопределить эти методы:
В Objective-C:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
В Свифт:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .lightContent
}
Кроме того, вы можете установить barStyle
в экземпляре UINavigationBar
:
Цель C:
// e.g. in your view controller's viewDidLoad method:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack; // this will give you a white status bar
стриж
// e.g. in your view controller's viewDidLoad method:
navigationController?.navigationBar.barStyle = .black // this will give you a white status bar
UIBarStyle
по default
: black
, blackOpaque
, blackTranslucent
. Последние 3 должны дать вам строку состояния с белым текстом, только последние два указывают на непрозрачность панели.
Примечание. Вы по-прежнему можете изменить внешний вид панели навигации, как вам нравится.
Если вы не можете изменить код ViewController
Если вы используете библиотеку, содержащую (например) AwesomeViewController с неправильным цветом строки состояния, вы можете попробовать следующее:
let awesomeViewController = AwesomeViewController()
awesomeViewController.navigationBar.barStyle = .blackTranslucent // or other style
Для локализации ViewController
Если вы используете UIViewControllerContainment
есть несколько других методов, на которые стоит обратить внимание.
Если вы хотите, чтобы child viewController контролировал представление строки состояния (то есть, если ребенок находится в верхней части экрана
в Свифт
class RootViewController: UIViewController {
private let messageBarViewController = MessageBarViewController()
override func childViewControllerForStatusBarStyle() -> UIViewController? {
return messageBarViewController
}
override func viewDidLoad() {
super.viewDidLoad()
//add child vc code here...
setNeedsStatusBarAppearanceUpdate()
}
}
class MessageBarViewController: UIViewController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
}
Изменение стиля строки состояния для всего приложения
SWIFT:
Шаг 1:
В вашем Info.plist добавьте следующий атрибут:
View controller-based status bar appearance
и установить его значение для
NO
как описано на изображении ниже:
Шаг 2:
В файле AppDelegate.swift, в didFinishLaunchingWithOptions
методе, добавьте этот код:
UIApplication.shared.statusBarStyle = .lightContent
или же
UIApplication.shared.statusBarStyle = .default
Опция .lightContent будет устанавливать цвет statusBar в белый для всего приложения.
Параметр .default будет устанавливать цвет statusBar в исходный черный цвет для всего приложения.
Objective-C:
Следуйте первому шагу от секции SWIFT . Затем добавьте этот код в файл AppDelegate.m :
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
или же
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];