如何防止单个UIViewContoller在Monotouch中旋转? (所有其他视图可以旋转)

时间:2012-12-04 11:46:51

标签: xamarin.ios rotation orientation

我有一个支持所有方向的iPhone应用程序但在一个UIViewController中我只想支持肖像(或颠倒)。

我已将以下代码添加到我的UIViewController中,但它仍然会旋转。

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation     toInterfaceOrientation)
    {
        // Return true for supported orientations
        return ((toInterfaceOrientation != UIInterfaceOrientation.LandscapeLeft) && (toInterfaceOrientation != UIInterfaceOrientation.LandscapeRight));
    }

无论我在哪里添加ShouldAutorotateToInterfaceOrientation代码,它仍然会旋转!

有没有办法让应用程序支持除一个以外的所有UIViewControllers的所有方向?

我也在使用NavigationController - 这会影响一些事情吗?

2 个答案:

答案 0 :(得分:0)

如果您使用iOS 6,则必须覆盖GetSupportedInterfaceOrientations方法,而不是ShouldAutorotateToInterfaceOrientation

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }

答案 1 :(得分:0)

可能发生这种情况是因为您的根导航控制器带来了自己的旋转。让我们假设你的根导航控制器是一个普通的UINavigationViewController。创建派生自己的版本:

public class UINavigationControllerWithoutRotation : UINavigationController
{
    public UINavigationControllerWithoutRotation()
    {
    }

    public UINavigationControllerWithoutRotation(UIViewController viewController) : base(viewController)
    {
    }

    public override bool ShouldAutorotate()
    {
        return false;
    }
}

现在使用它作为根控制器。找到类似的代码:

var myRootController = new UINavigationController();

并将其替换为

var myRootController = new UINavigationControllerWithoutRotation();

那应该做的工作。请记住,如果您的根视图控制器是UITabBarController,则必须执行稍微不同的操作!