supportedInterfaceOrientations

supportedInterfaceOrientations

我的根 View Controller 的supportedInterfaceOrientations实现几乎总是返回UIInterfaceOrientationMaskAll,但是在一种极端情况下,它返回UIInterfaceOrientationMaskLandscape

如果用户旋转设备,则此方法有效。但是,如果将设备保持为纵向模式,则除非用户手动旋转设备,否则永远不会调用supportedInterfaceOrientations方法。

如何以编程方式告诉系统此方法的返回值已更改?

根据文档,似乎我应该能够调用[UIViewController attemptRotationToDeviceOrientation],但是这没有任何效果(永远不会调用supportedInterfaceOrientations,并且屏幕也不会旋转)。

我发现其他人发布了各种解决方法来尝试解决此问题,但是在我的测试中没有一个起作用。我怀疑他们可能在iOS 5.0中工作,但在iOS 6.0中却没有。

我在根 View Controller 的YES方法中返回shouldAutorotate

最佳答案

首先,如果要在横向模式下显示UIViewController,使用它可能会很有用。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

另外,很大程度上取决于您的UIViewController嵌入在哪个 Controller 中。

例如,如果它在UINavigationController内部,则可能需要对该UINavigationController进行子类化,以覆盖此类定向方法。

子类UINavigationController(层次结构的顶部viewcontroller将控制方向。)需要将其设置为self.window.rootViewController。
- (BOOL)shouldAutorotate
 {
     return self.topViewController.shouldAutorotate;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
     return self.topViewController.supportedInterfaceOrientations;
 }

从iOS 6开始,UINavigationController不会要求其UIVIewControllers提供方向支持。因此,我们将需要对其进行子类化。

注意:

每当完成Push操作时,UINavigationController始终会调用shouldAutorotatesupportedInterfaceOrientations方法。

关于ios - 当supportedInterfaceOrientations发生更改时,如何通知系统?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13150154/

10-14 17:32