MvvmCross:如何在iPhone上的iOS 7中强制MvxViewController的特定方向

在我的iOS 7应用程序中,除了需要在“video播放器”视图上允许“横向”方向外,我只允许“支持的设备方向”上的“纵向”用于整个应用程序。 我怎样才能用MvvmCross或MvxViewController? 我试图设置这些ShouldAutorotate(),GetSupportedInterfaceOrientations()方法,它什么也不做。 它保持locking在“video播放器”视图的肖像模式。 有谁知道什么是在视图上设置方向的正确方法?

public class VideoPlayerView : MvxViewController { public override bool ShouldAutorotate() { return true; } public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() { return UIInterfaceOrientationMask.AllButUpsideDown; } public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation() { return UIInterfaceOrientation.LandscapeLeft; } public override void ViewDidLoad(bool animated) { Title = "Video"; base.ViewDidLoad(animated); } 

}

更新:我想出了如何解决这个问题。

步骤1)对于mvvmcross,您必须设置一个新的ViewPresenter从MvxModalNavSupportTouchViewPresenterinheritance

步骤2)用下面的代码创build一个从UINavigationControllerinheritance的新的导航控制器

  public override bool ShouldAutorotate() { return TopViewController.ShouldAutorotate(); } public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() { var orientation = TopViewController.GetSupportedInterfaceOrientations(); return orientation; } 

步骤3)在刚刚在步骤1中创build的新View Presenter中,重写CreateNavigationController方法并使用在步骤2中创build的新NavigationController。

步骤4)在ViewController上你想改变方向,你可以通过覆盖GetSupportedInterfaceOrientations方法来改变它。 例如,在我的VideoPlayerView,我有下面的代码。

  public override bool ShouldAutorotate() { return true; } public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() { return UIInterfaceOrientationMask.AllButUpsideDown; }