ViewController和SubView无法正确旋转

时间:2014-06-11 21:02:50

标签: ios objective-c view orientation

我正在处理当前现有应用程序的横向视图。我相信我已经正确设置了autoRotate,支持的界面等,我实际上正在重用使用更简单的应用程序的代码。但是,当模拟器旋转到横向模式时,会加载正确的视图,但状态栏和视图会保留在iPad的短边上。我附上了截图和代码。视图控制器的问题在链中或appdelegate中更高吗?我已经在调试器中跟踪了被调用的控制器,一旦加载此页面,它们就会被解除。我对obj-c是相当新的,所以有可能这是我想要的简单的东西,但我检查了.xib文件的所有属性,所有东西看起来都是copasetic。
enter image description here
一些代码:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;// | UIInterfaceOrientationMaskPortraitUpsideDown;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return NO;
}![enter image description here][2]

-(void)orientationChanged{
    UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];  

    if ((interfaceOrientation==UIInterfaceOrientationPortrait)||(interfaceOrientation ==UIInterfaceOrientationPortraitUpsideDown)){
        self.view = self.portraitView;
    } else {
        self.view = self.landscapeView;
    }
}

编辑 - iOS 7.1和6.1都会出现此问题,这是应用中的任何一个屏幕首次支持横向视图。为了阐明视图,纵向和横向视图是单个.xib文件中的单独视图。文件所有者类设置为正确的视图控制器类,而父视图控制器(销售屏幕)不应旋转。它没有横向视图,但即使将其autoRotate方法设置为返回YES,子视图也不能正确定位。

2 个答案:

答案 0 :(得分:0)

就像0x7ffffffff已经说过你需要在你的shouldAutorotate函数中允许旋转。您还需要在项目设置中设置支持的旋转方向。

首先转到项目的设置:

Go to settings

接下来,您需要选择要支持的所有方向:

Part of project settings

另一个非常重要的事情:只有根视图控制器才会收到旋转事件。如果将View Controller嵌套在View Controller中,那么嵌套的Controller将不会接收这些事件,除非您从父级手动连接它们。这就是为什么我通常不嵌套ViewControllers但是对嵌套视图使用ad-hoc NSObjects或UIView实现。

最后但并非最不重要:确保您的设备没有旋转锁定:http://www.iphonefaq.org/archives/972915

答案 1 :(得分:0)

问题出现了,因为customerView的子类没有收到轮换通知。在跟踪该类之后,需要设置NSNotificationCenter以进行方向更改,然后允许autoRotation和supprotedInterfaceOrientations。