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

programmatically change orientation from Landscape to Portrait Mode xamarin IOS

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

[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?

谢谢

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

这些行将阻止 ViewController 您实现此方法以获得除纵向以外的任何其他方向。

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

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

在你的助手中class;

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

现在只要在您想要 lock/change 方向的任何地方调用 LockOrientation 方法即可。

示例:

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

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

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

    }