即使告诉不要,iOS6方向仍在旋转

时间:2012-12-07 01:59:19

标签: ios ios6 screen-orientation

我的iOS应用程序似乎遇到了困难。

它的部署目标是iOS5.0,但我使用的是iOS 6.0 SDK。

在我的View Controller中,我有:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

在iOS5模拟器中运行时,此功能正常。 视图不会旋转到LandScape或颠倒。

但是,在IOS6模拟器(以及设备上),它将继续旋转。

我已经使用NSLog来检查-supportedInterfaceOrientations是否会被调用,但它确实被调用了两次,但它仍然会旋转到LandScape(右侧或左侧)

我做错了什么?

我还扩展了UINavigationController(我的根视图控制器)以包含这个:

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{    
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

@end

但仍然没有成功。

感谢。

修改

根据matt的回答。我还需要使用与我的UINavigationController类似的实现来扩展UITabBarController并且这样做有效。

希望这有助于其他人。

3 个答案:

答案 0 :(得分:4)

问题可能在于您有导航界面。你呢?如果是这样,您需要子类化UINavigationController并使用该子类的实例作为导航控制器。在该子类中, 是您实现supportedInterfaceOrientations的地方。对于任何父视图控制器也是如此(例如UITabBarController)。

原因是iOS 6思考旋转的方式完全与iOS 5不同。您认为从iOS 5中知道的任何内容都不再适用。在iOS 6中,我们从应用程序本身的级别开始,然后通过应用程序代理向下运行到根视图控制器或其他全屏视图控制器(例如,呈现的视图控制器)和停止 。父母不再咨询其子女。

此外,应用程序本身(通过info.plist或app delegate)必须列出每个方向应用程序的任何部分 假设;视图控制器只能要求子集

请参阅发行说明:

http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html

但请注意,这句话是谎言:

  

为了兼容性,仍然实现shouldAutorotateToInterfaceOrientation:方法的视图控制器不会获得新的自动旋转行为

相反,在iOS 6中,旧的自转方法被完全忽略;每个人都获得了新的自转行为。它不是"选择加入"。

答案 1 :(得分:0)

如果您不希望该应用程序旋转,您可以从info.plist中支持的界面方向中删除横向,并且应该这样做。

否则,您需要告诉根视图控制器向其子级查找方向信息。

布兰登

答案 2 :(得分:0)

检查您的项目设置和info.plist,它们的优先级高于应用代理。 确保只选择你想要的方向