2016-02-06 1 views
2

J'ai un contrôleur de vue avec un style de barre d'état Light, puis un utilisateur peut appuyer sur un bouton qui présente un Game Center Leaderboard de manière modale. Cependant, je souhaite que le contrôleur de vue modale ait un style .Default lorsque le contrôleur de vue parent a un style .LightContent. Est-ce possible? Le contrôleur de vue modale peut-il avoir un style différent de celui du contrôleur de vue parent? Si oui, comment pourrais-je y parvenir?Contrôleur Modal View avec un style StatusBar différent de celui de ParentViewController

+0

Certainement possible. Dans chaque contrôleur de vue, substituez-vous '- preferedStatusBarStyle:'? – ajfigueroa

+0

@ajfigueroa En fait, puisque je présente un classement Game Center, je n'ai pas de contrôleur de vue pour le Game Center Leaderboard. – Harish

Répondre

1

Eh bien, je pense avoir trouvé une bonne solution à ma question. Fondamentalement, lors de la présentation modale, vous avez un completionHandler. Dans la completionHandler mettre ces lignes de code lorsque vous présenterez la vue modale:

self.setStatusBarStyle(.Default) 
self.setNeedsStatusBarAppearanceUpdate() 

Lorsque vous Rejetant la vue modale:

self.setStatusBarStyle(.LightContent) 
self.setNeedsStatusBarAppearanceUpdate() 

Assurez-vous de ne pas mettre en œuvre le preferredStatusBarStyle dans votre contrôleur de vue . Cette méthode me lançait et si vous implémentez la méthode preferredStatusBarStyle, elle surchargera la méthode setStatusBarStyle et cette astuce ne fonctionnera pas. Fondamentalement NE PAS implémenter preferredStatusBarStyle.

2

J'ai eu le même problème. Ma solution était de passer outre: GKGameCenterViewController classe J'ai suivi answer here: J'ai ajouté la méthode preferredStatusBarStyle() dans mon contrôleur de vue prioritaire et mis UIViewControllerBasedStatusBarAppearance-NO dans le fichier .plist.

+0

Bon point merci. –

+0

Juste une question si, pour une raison quelconque, lorsque j'utilise votre solution, toute l'apparence de la barre d'état des applications devient noire. Comment puis-je avoir des couleurs de barre d'état blanches? Y-a-t-il un moyen de faire ça? – Harish

+0

J'ai également mis 'preferredStatusBarStyle()' dans 'BaseViewController' que j'utilise comme classe de parrent pour tous mes contrôleurs View. –

0

Cette résolu le problème pour moi:

modalViewController.modalPresentationStyle = .overCurrentContext 
0

La réponse suivante est basée sur la solution de @ Harish. Dans votre propre UIViewController (ou votre propre classe de base) ajouter:

var statusBarStyle: UIStatusBarStyle = .lightContent 
override var preferredStatusBarStyle: UIStatusBarStyle { 
    return statusBarStyle 
} 

Et appelez:

self.statusBarStyle = .default // or .lightContent 
self.setNeedsStatusBarAppearanceUpdate() 

Chaque fois que vous voulez changer de style de barre d'état.