Как правильно изменить стиль строки статуса в swift 2/iOS 9?

Я пытаюсь изменить стиль строки состояния на .Light, но предыдущий код, который я реализовал в swift 1.2, кажется, больше не работает.. вот код:

override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.sharedApplication().statusBarStyle = .LightContent

    }

теперь у меня есть параметр View controller-based status bar appearance info.plist для YES и чтение документа UIKit, это отрицает любые изменения statusBarStyle и сохраняет его по умолчанию. Однако, когда я меняю настройку на "НЕТ" и меняю statusBarStyle, я получаю этот <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable в своем отладчике. Так это ошибка в Xcode? потому что для изменения стиля строки состояния вы должны изменить настройку info.plist на NO, но когда это произойдет.. ошибка

Ответ 1

Apple добавила возможность изменения стиля строки состояния в информации о развертывании. Просто выберите "Свет". ScreenShot of Xcode

Также установите View controller-based status bar appearance на NO в Info.plist

info plist

Ответ 2

Я всегда так делал.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    //Changing Status Bar
    override func preferredStatusBarStyle() -> UIStatusBarStyle {

        //LightContent
        return UIStatusBarStyle.LightContent

        //Default
        //return UIStatusBarStyle.Default
    }
}

Он работает в любой версии SWIFT 2.x. Для этого вам необходимо установить View controller-based status bar appearance в Info.plist файл YES.

Ответ 3

Вы можете использовать preferredStatusBarStyle в своем контроллере вида:

шаг 1: в файле info.plist установите ViewControllerBasedStatusBarAppearance на YES. Шаг 2: добавьте этот код в ViewController, который вы хотите изменить:

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}

*** Совет. Он работает только за пределами функций ViewDidLoad(), didReceiveMemoryWarning().

Ответ 4

Изменение информации о развертывании работает, но, несмотря на это, вам нужно добавить "Просмотреть внешний вид строки состояния на основе контроллера", чтобы файл plist установил значение НЕТ.

Ответ 5

Swift 3 просто добавьте View controller-based status bar appearance со значением NO в info.plist, а затем добавьте в ViewController, где хотите:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

Ответ 6

Вы также можете добавить это в AppDelegate. Этот вариант лучше, если вы хотите изменить его для каждого ViewController в приложении и не должны делать его другим для любого другого VC.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    application.statusBarStyle = UIStatusBarStyle.LightContent
    // instead of 
    // UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)
    // which gives warning about deprecation in iOS 9

    return true
}

Ответ 7

Похоже, что это ошибка в Xcode 7.0. Я также получаю ошибку Error>: CGContextSaveGState: invalid context 0x0. при настройке View controller-based status bar appearance

Теперь я просто переопределяю цвет строки состояния в каждом контроллере представления.

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
} 

Ответ 8

Вы можете выбрать "свет" в информации о развертывании, но тогда вам также необходимо добавить "Просмотр состояния панели управления на основе контроллера" и установить его в положение "Нет".

Ответ 9

Здесь попробуйте это, это может помочь вам

Сначала перейдите в файл info.plist и добавьте этот "Просмотр строки состояния на основе контроллера" в качестве ключа и установите значение как NO

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

после этого зайдите в файл AppDelegate.swift и пропустите эту строку UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent кода в

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool{
 UIApplication.sharedApplication().statusBarStyle =   UIStatusBarStyle.LightContent
 return true
}

как это

Ответ 10

Для быстрого 3 переопределения предпочтительной переменнойStatusBarStyle используйте это:

 override var preferredStatusBarStyle: UIStatusBarStyle{
    return .lightContent
}

Ответ 11

Существующие ответы великолепны, но теперь это немного отличается от новых обновлений!

override var теперь вместо override func для всех запутанных - суть все та же, и вам все равно нужно изменить свой "Info.plist":

override var preferredStatusBarStyle: UIStatusBarStyle 
{    
    //LightContent
    return UIStatusBarStyle.lightContent

    //Default
    //return UIStatusBarStyle.default
}

Ответ 12

Если вы хотите время от времени менять его в своем приложении, вы можете использовать переопределения preferredStatusBarStyle(), как упоминалось ранее.

Просто убедитесь, что вы также вызываете setNeedsStatusBarAppearanceUpdate() после вызова preferredStatusBarStyle(), чтобы сообщить об этом IOS.