0

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

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

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

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

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

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

4

2 回答 2

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,则您必须做一些不同的事情!

于 2014-01-23T17:15:35.257 回答
0

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

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }
于 2012-12-04T13:10:36.807 回答