我正在开发一个使用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中的一个视图控制器以编程方式将方向从横向更改为纵向模式?
谢谢
答案 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();
}