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
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
Peut-être que j'ai besoin de changer quelque chose dans mon fichier AppDelegate de mvvmcross? Merci – Andrei
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