以编程方式将方向从横向更改为纵向模式 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();
}
我正在使用 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();
}