web-dev-qa-db-fra.com

Comment changer correctement le style de ma barre d'état dans Swift 2 / iOS 9?

J'essaie de changer le style de ma barre d'état en .Light mais le code précédent que j’avais implémenté dans Swift 1.2 ne semble plus fonctionner. voici le code:

override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.sharedApplication().statusBarStyle = .LightContent

    }

maintenant j'ai mon View controller-based status bar appearance Le réglage de info.plist sur YES et la lecture du document UIKit annulent toute modification de statusBarStyle et le conservent par défaut. Cependant, lorsque je modifie le paramètre sur 'NO' et modifie le statusBarStyle, je reçois ce <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable dans mon débogueur .. Alors, s'agit-il d'un bogue dans Xcode? car pour changer le style de la barre d'état, vous devez changer le paramètre info.plist en NON, mais quand cela se produit .. erreur

48
John Jackson

Apple a ajouté la possibilité de changer le style de la barre d'état dans les informations de déploiement. Choisissez simplement 'Light' . ScreenShot of Xcode

Définir également View controller-based status bar appearance clé pour NO dans le Info.plist

info plist

72
Tom Hughes

J'ai toujours fait comme ça.

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
    }
}

Cela fonctionne dans n’importe quelle version Swift 2.x. Cela nécessite que vous définissiez View controller-based status bar appearance dans votre Info.plist fichier dans YES.

45
dede.exe

Vous pouvez toujours utiliser preferredStatusBarStyle dans votre contrôleur de vue:

étape 1: dans l'info.plist, définissez ViewControllerBasedStatusBarAppearance sur YES. étape 2: ajoutez ce code au ViewController que vous souhaitez éditer:

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}

*** Astuce: Il semble que cela ne fonctionne qu'en dehors des fonctions ViewDidLoad (), didReceiveMemoryWarning ().

7
Tom Hughes

Swift 3 ajoute simplement View controller-based status bar appearance avec la valeur NO à info.plistet ajoutez ensuite à ViewController où vous voulez:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
7
MRustamzade

La modification des informations de déploiement fonctionne mais malgré - vous devez ajouter la clé 'Afficher l'apparence de la barre d'état basée sur le contrôleur' ​​pour que le fichier plist le définisse sur NO.

6
Yuliia

Vous pouvez aussi simplement ajouter ceci dans AppDelegate. Cette option est préférable si vous souhaitez la modifier pour chaque ViewController de l'application et ne pas avoir à la différencier pour chaque autre 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

Ici essayez ceci cela pourrait vous aider

Commencez par aller au fichier info.plist et ajoutez cette "Vue de la barre d'état basée sur le contrôleur" en tant que clé et définissez la valeur sur NO.

ci-dessous montré dans l'image enter image description here

après cela, entrez dans le fichier AppDelegate.Swift et passez cette ligne de code UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent dans

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

comme ça

4
Anirudh R.Huilgol.

Vous pouvez choisir "léger" dans les informations de déploiement, mais vous devez également ajouter "Afficher l'apparence de la barre d'état basée sur le contrôleur" et le définir sur NO.

4
Telstar

Pour Swift 3 remplacer la variable preferredStatusBarStyle, utilisez ceci:

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

On dirait que c'est un bug dans Xcode 7.0. Je reçois aussi le Error>: CGContextSaveGState: invalid context 0x0. _ erreur lors du réglage de View controller-based status bar appearance

Pour l'instant, je remplace simplement la couleur de la barre d'état dans chaque contrôleur de vue.

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

Les réponses existantes sont excellentes, mais c'est un peu différent maintenant avec les nouvelles mises à jour!

override var maintenant au lieu de override func pour tous ceux qui sont confus - le Gist est toujours le même et vous devez toujours changer votre 'Info.plist':

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

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

Si vous souhaitez le modifier de temps à autre dans votre application, vous pouvez utiliser les remplacements preferredStatusBarStyle() mentionnés précédemment.

Assurez-vous simplement que vous appelez également setNeedsStatusBarAppearanceUpdate() après avoir appelé preferredStatusBarStyle(), pour en informer IOS).

0
Hardy_Germany