web-dev-qa-db-ja.com

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の変更が無効になり、デフォルトのままになります。ただし、設定を「NO」に変更し、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に変更する必要がありますが、その場合はエラーが発生します。

48
John Jackson

Appleは、展開情報のステータスバーのスタイルを変更する機能を追加しました。 「ライト」を選択するだけです。 ScreenShot of Xcode

View controller-based status bar appearanceInfo.plistキーをNOに設定します

info plist

72
Tom Hughes

私はいつもこのようにしました。

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.plistYESに設定する必要があります。

45
dede.exe

View ControllerでpreferredStatusBarStyleを引き続き使用できます。

ステップ1:info.plistで、ViewControllerBasedStatusBarAppearanceをYESに設定します。ステップ2:このコードを編集するViewControllerに追加します。

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}

***ヒント:ViewDidLoad()、didReceiveMemoryWarning()関数の外部でのみ機能するようです。

7
Tom Hughes

Swift 3はView controller-based status bar appearanceの値をNOinfo.plistに追加し、次にViewControllerに追加します:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
7
MRustamzade

展開情報の変更は機能しますが、それにもかかわらず-NOに設定するplistファイルに「View Controller-basedステータスバーの外観」キーを追加する必要があります。

6
Yuliia

これを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
}
5
Tom Hughes

ここで試してみてください

まずinfo.plistファイルに移動し、この「View controller-based status bar Appearance」をキーとして追加し、値をNOに設定します

以下の画像に示されている enter image description here

この後、AppDelegate.Swiftファイルに来て、このUIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContentコード行を過ぎます

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

このような

4

展開情報で「ライト」を選択できますが、「コントローラーベースのステータスバーの外観を表示」を追加して、NOに設定する必要もあります。

4
Telstar

Swift 3の場合、preferredStatusBarStyle変数をオーバーライドして、これを使用します。

 override var preferredStatusBarStyle: UIStatusBarStyle{
    return .lightContent
}
4
bikram sapkota

Xcode 7.0のバグのようです。 Error>: CGContextSaveGState: invalid context 0x0.を設定すると、View controller-based status bar appearanceエラーも発生します。

今のところ、私はすべてのView Controllerでステータスバーの色をオーバーライドしています。

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

既存の回答は素晴らしいですが、新しいアップデートでは今とは少し異なります!

override varの代わりにoverride funcが混乱している人のために-Gistは同じであり、 'Info.plist'を変更する必要があります:

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

    //Default
    //return UIStatusBarStyle.default
}
2
Dan

アプリ内で時々変更したい場合は、前述のようにオーバーライドpreferredStatusBarStyle()を使用できます。

IOSについて通知するために、setNeedsStatusBarAppearanceUpdate()を呼び出した後、preferredStatusBarStyle()も呼び出すようにしてください。

0
Hardy_Germany