2017-03-28 1 views
1

J'ai une solution dans Xamarin mvvmcross qui supporte les orientations IOS portrait et paysage. IOS 8.0 Je voudrais ajouter un nouveau MvxViewController mais le verrouiller uniquement en mode Portrait. J'ai cherché dans des exemples Internet pour ios swift, xamarin formes mais tout cela ne sont pas appliquées pour la solution mvvmcross Y at-il moyen de verrouiller le mode Portrait seulement pour un écran avec Xamarin mvvmcroos?mvvmcross ios lock portrait orientation pour MvxViewController spécifique

Merci

Répondre

2

Ceci n'est pas différent d'un ViewController normal.

public override bool ShouldAutorotate() => false; 
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() => 
    UIInterfaceOrientationMask.Portrait; 
+0

Merci pour la réponse, j'ai ajouté code à mon contrôleur mais ShouldAutorotate n'est toujours pas appelé. public override bool FinishedLaunching (application UIApplication, options NSDictionary) { window = new UIWindow (UIScreen.MainScreen.Bornes); var présentateur = nouveau MvxIosViewPresenter (cette fenêtre); var setup = nouvelle configuration (présentateur); setup.Initialize(); var démarrage = Mvx.Resolve (); startup.Start(); window.MakeKeyAndVisible(); return true; } – Andrei

+0

Peut-être que j'ai besoin de changer quelque chose dans mon fichier AppDelegate de mvvmcross? Merci – Andrei

+0

Je pense que Apple a changé la façon dont les rotations fonctionnent dans iOS 8 et suivants. Je sais que c'est vraiment différent dans iOS 10. – Digitalsa1nt

0

En fait, pour moi est de travailler cette méthode: App AppDelegate: classe MvxApplicationDelegate i créé

public bool RestrictRotation = true; 

et méthode ajoutée:

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

alors pour une vue où je veux seulement Portrait mode, j'utilise

public override void ViewWillAppear(bool animated) 
{ 
    base.ViewWillAppear(animated); 

    AppDelegate app = (AppDelegate)UIApplication.SharedApplication.Delegate; 
    app.RestrictRotation = false; 
} 

et pour le soutien de toutes les rotations écran que je suis en train:

public override void ViewWillAppear(bool animated) 
{ 
    base.ViewWillAppear(animated); 

    AppDelegate app = (AppDelegate)UIApplication.SharedApplication.Delegate; 
    app.RestrictRotation = true; 
} 

espère que cela aidera! Merci

0

je besoin d'une application qui est tout portrait sauf certaines vues modales sont le paysage, donc je l'ai fait comme ça pour iOS 10 sur MvvmCross 5.0:

définir d'abord les orientations de votre application aura besoin dans le Info.plist.

Ensuite, vous aurez besoin de trouver votre [MvxRootPresentation], aka votre vue racine.

La vue racine est celui qui recevra les appels de ShouldAutorotate & GetSupportedInterfaceOrientations Je passe ensuite ces bas aux contrôleurs visibles si elles mettent en œuvre les méthodes de ces deux méthodes sont virtuelles si pas mis en œuvre la valeur par défaut est ShouldRotate = false GetSupportedInterfaceOrientations = AllButUpsideDown

Ajouter ShouldAutorotate & GetSupportedInterfaceOrientations méthodes dans la vue racine comme ceci:

public override bool ShouldAutorotate() 
{ 
    return true; // Allows all view to auto rotate if they are wrong orientation 
} 

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() 
{ 
    var orientation = UIInterfaceOrientationMask.Portrait; 

    if (VisibleUIViewController != null) 
    { 
     var VisibleMvxViewController = VisibleUIViewController as MvxViewController; 
     if (VisibleMvxViewController != null) 
     { 
      // Check if the view is a Modal View by checking for the MvxModalPresentationAttribute 
      var attribute = VisibleMvxViewController.GetType().GetCustomAttributes(typeof(MvxModalPresentationAttribute), true).FirstOrDefault() as MvxModalPresentationAttribute; 
      if (attribute != null) 
      { 
       // Visible view is a modal 
       if (!VisibleUIViewController.IsBeingDismissed) 
       { 
        // view is not being dismissed so use the orientation of the modal 
        orientation = VisibleUIViewController.GetSupportedInterfaceOrientations(); 
       } 
      } 
     } 
    } 

    return orientation; 
} 

Puis vues modales (qui HAV e l'attribut MvxModalPresentation dans mon cas) que vous souhaitez modifier l'override d'orientation de cette méthode:

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

Cette solution signifie que vous n'avez pas besoin d'ajouter quelque chose à la AppDelegate