2017-06-14 4 views
0

Je développe une application avec la technologie Xamarin MVVMCross et je voudrais poser une question sur l'option InterfaceOrientation: tous les contrôleurs d'application supportent toutes les orientations, mais on ne devrait utiliser que le mode Portrait. Quand je vais à cette ViewController des autres en mode Portrait, je suis capable de garder mon viewcontroller portrait en mode Portrait en raison de la méthode dans mes AppDelegate.cs:changer d'orientation du mode paysage au mode portrait xamarin IOS

[Export("application:supportedInterfaceOrientationsForWindow:")] 
public UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, IntPtr forWindow) 
{ 
    if (this.RestrictRotation) 
     return UIInterfaceOrientationMask.All; 
    else 
     return UIInterfaceOrientationMask.Portrait; 
} 

Mais quand je vais à mon contrôleur de portraitview lorsque l'appareil Dans les orientations LandscapeLeft (LandscapeRight), la méthode GetSupportedInterfaceOrientations de la méthode AppDelegate.cs n'est pas appelée et ce contrôleur de vue est ouvert en mode Paysage. Existe-t-il un moyen de changer l'orientation du mode paysage au mode portrait par programmation pour un seul contrôleur de vue dans Xamarin IOS?

Merci

Répondre

0

Dans votre classe d'assistance;

public static void LockOrientation(UIInterfaceOrientationMask uIInterfaceOrientationMask, UIInterfaceOrientation uIInterfaceOrientation) 
     { 
      if (UIApplication.SharedApplication.Delegate != null) 
      { 
       CommonUtils.LockOrientation(uIInterfaceOrientationMask); 
       UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)uIInterfaceOrientation), new NSString("orientation")); 
      } 
     } 

Dans AppDelegate.cs

//Set the orientation for rest of the app 
public UIInterfaceOrientationMask OrientationLock = UIInterfaceOrientationMask.All; 

      public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, UIWindow forWindow) 
      { 
       return OrientationLock; 
      } 

Maintenant, il suffit d'appeler la méthode LockOrientation où vous souhaitez verrouiller/orientation du changement.

Exemple:

CommonUtils.LockOrientation(UIInterfaceOrientationMask.Portrait, UIInterfaceOrientation.Portrait); 
+1

Merci Singhal2, il est ce que je cherchais! – Andrei

0

Si vous voulez contrôler l'orientation d'un seul ViewController ne pas utiliser la méthode AppDelegateGetSupportedInterfaceOrientations au lieu d'utiliser celui du ViewController que vous souhaitez contrôler.

Ces lignes empêcheront le ViewController d'implémenter cette méthode pour obtenir une orientation autre que Portrait.

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() 
{ 
    return UIInterfaceOrientationMask.Portrait; 
} 

Note: Vous devrez répéter la même chose pour tous les ViewController au cas où vous voulez forcer l'orientation à plus d'un.