ios – 在supportInterfaceOrientations更改时如何通知系统?

前端之家收集整理的这篇文章主要介绍了ios – 在supportInterfaceOrientations更改时如何通知系统?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的root视图控制器的supportedInterfaceOrientations的实现几乎总是返回UIInterfaceOrientationMaskAll,但是有一个边缘情况,它返回UIInterfaceOrientationMaskLandscape.

如果用户旋转设备,这是正常的.但是,如果设备保持在纵向模式,则supportedInterfaceOrientations方法不会被调用,除非用户手动旋转设备.

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

根据文档,似乎我应该能够调用[UIViewController attemptRotationToDeviceOrientation],但是这没有任何效果(supportedInterfaceOrientations从不被调用,屏幕不旋转).

我发现其他人已经发布了各种解决方法来尝试解决这个问题,但是没有人在我的测试中工作.我怀疑他们可能在iOS 5.0中工作,但不是iOS 6.0.

我在根视图控制器的shouldAutorotate方法中返回YES.

解决方法

首先,如果您要以横向模式呈现您的UIViewController,则可能会有用.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

另外,很多依赖于你的UIViewController嵌入在哪个控制器中.

例如,如果在UINavigationController内部,那么您可能需要将该UINavigationController子类化以覆盖这样的方向方法.

子类UINavigationController(层次结构的顶层viewcontroller将控制方向).需要将其设置为self.window.rootViewController.

- (BOOL)shouldAutorotate
 {
     return self.topViewController.shouldAutorotate;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
     return self.topViewController.supportedInterfaceOrientations;
 }

从iOS 6起,UINavigationController不会要求其UIVIewControllers进行定向支持.因此,我们需要对它进行子类化.

注意 :

每当Push操作完成时,将始终调用shouldAutorotate和supportedInterfaceOrientations方法调用UINavigationController.

猜你在找的iOS相关文章