2017-04-07 2 views
1

J'ai un cas où j'ai besoin de créer un nouveau UIWindow dans mon application. Je souhaite également que la nouvelle fenêtre soit verrouillée en mode portrait, mais la fenêtre d'origine de mon application ne doit pas être verrouillée en orientation portrait.Verrouiller l'orientation de la barre d'état dans une interface utilisateur distincte

Je suis en train de ma nouvelle fenêtre comme ceci:

newWindow = UIWindow(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)) 
newWindow?.rootViewController = ViewController2() 
newWindow?.makeKeyAndVisible() 

et d'orientation avec ViewController2 serrures:

override var shouldAutorotate: Bool { 
    return false 
} 

Le problème est, lorsque la nouvelle fenêtre est affichée, et l'utilisateur fait tourner la appareil, l'application elle-même verrouillera en mode portrait, mais la barre d'état tournera en mode paysage: enter image description here

Comment puis-je m'assurer que la barre d'état se verrouille également en mode portrait dans ma nouvelle fenêtre?

Dans le cas où quelqu'un veut voir en action dans un projet simple: https://github.com/rajohns08/StatusBar

Répondre

1

Utilisez cette documentation pour votre problème https://developer.apple.com/reference/uikit/uiinterfaceorientationmask

ou La solution est dans le délégué de l'application. J'ai pu gérer les orientations supportées pour chaque fenêtre séparément, là:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    // check, which window is asking and return the mask 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
+0

J'ai fini par utiliser cette méthode de délégation, mais la vérification de la fenêtre passée dans la méthode n'a pas fonctionné. J'ai dû vérifier KeyWindow de UIApplication et retourner le masque approprié. –