Поиск…


Для баров статуса не-UINavigationBar

  1. В настройке info.plist View controller-based status bar appearance на YES
  2. В виду, что контроллеры, не содержащиеся в 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];


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow