2016-12-19 1 views
2

J'ai une application qui est de 99% portrait seulement, un seul contrôleur de vue est en paysage. Par conséquent, mon Info.plist contient trois orientations possibles: Portrait et les deux Paysage.iOS: barre d'état et le clavier tourne après l'application en arrière-plan

Tout fonctionne bien, sauf: lorsque je ramène mon application à l'arrière-plan et à l'avant, la barre d'état (et, si elle est affichée, le clavier) passe en mode paysage lorsque je fais tourner l'appareil. Mes opinions restent correctes.

Est-ce un bug ou manque-t-il quelque chose?

+0

J'ai exactement le même problème et je ne peux pas y faire face, des mises à jour. Je suis très frustré à ce sujet. Mon application n'utilise que des XIB (pas de story-board), et a une orientation portrait pour tous les écrans sauf un, tout comme le vôtre. –

Répondre

2

Vous pouvez essayer d'implémenter application:supportedInterfaceOrientationsForWindow: dans votre App Delegate.

à partir des documents d'Apple:

Cette méthode renvoie l'ensemble total des orientations d'interface pris en charge par l'application. Lors de la détermination de la rotation d'un contrôleur de vue particulier, les orientations renvoyées par cette méthode sont croisées avec les orientations prises en charge par le contrôleur de vue racine ou le contrôleur de vue présenté le plus haut. Le contrôleur d'application et de vue doit accepter avant que la rotation soit autorisée. Si vous n'implémentez pas cette méthode, l'application utilise les valeurs de la clé UIInterfaceOrientation de l'Info.plist de l'application comme orientations d'interface par défaut.

Vous pouvez ensuite ajouter quelque chose comme ça (supposons que votre juste un contrôleur de paysage est MyLandscapeOnlyViewController):

Objective-C

 
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    // Return the desired orientation for your custom-oriented ViewController 
    if ([window.rootViewController.presentedViewController isKindOfClass:[MyLandscapeOnlyViewController class]]) 
    { 
     return UIInterfaceOrientationMaskLandscape; 
    } 

    // Default orientation is portrait 
    return UIInterfaceOrientationMaskPortrait; 
} 

Swift 3

 
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    // Return the desired orientation for your custom-oriented ViewController 
    if (window?.rootViewController?.presentedViewController?.isKind(of: MyLandscapeOnlyViewController.self) == true) { 
     return .landscape 
    } 

    // Default orientation is portrait 
    return .portrait 
} 

L'inspection du ViewController présenté le plus haut pourrait être plus difficile selon votre hiérarchie de vue mais c'est l'idée générale.

Espérons que cela aide!

+0

Cela a fonctionné parfaitement pour mon application, acclamations mate! –