以编程方式将方向从横向更改为纵向模式xamarin IOS

时间:2017-06-14 01:58:40

标签: ios xamarin xamarin.ios mvvmcross uiinterfaceorientation

我正在开发一个使用Xamarin MVVMCross技术的应用程序,并且想问一个关于InterfaceOrientation选项的问题:应用程序的所有视图控制器都支持所有方向,但是应该只使用Portrait模式。 当我在Portrait模式下从其他人那里转到ViewController时,由于我的AppDelegate.cs中的方法,我能够将肖像视图控制器保持在纵向模式:

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

但是当我在使用LandscapeLeft(LandscapeRight)方向的设备时进入我的portraitview控制器时,未调用AppDelegate.cs方法中的GetSupportedInterfaceOrientations,并且在横向模式下打开视图控制器。 有没有办法以Xamarin IOS中的一个视图控制器以编程方式将方向从横向更改为纵向模式?

谢谢

3 个答案:

答案 0 :(得分:0)

如果要控制单个ViewController的方向,请不要使用AppDelegate GetSupportedInterfaceOrientations方法,而是使用要控制的ViewController中的方法。

这些行将阻止您实现此方法的ViewController获取除Portrait之外的任何其他方向。

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

注意:如果您想要将方向强制为多个ViewController,则需要对每个ViewController重复相同的操作。

答案 1 :(得分:0)

在你的帮助班里;

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"));
            }
        }

在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;
            }

现在只需调用LockOrientation方法,无论您想锁定/更改方向。

示例:

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

答案 2 :(得分:0)

我希望工作.. 放入你的控制器类

public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation)
    {
        base.DidRotate(fromInterfaceOrientation);
        UIAlertView alert = new UIAlertView();
        alert.Title = UIDevice.CurrentDevice.Orientation + "";
        alert.AddButton("ok");
        alert.Show();

    }