我正在处理当前现有应用程序的横向视图。我相信我已经正确设置了autoRotate,支持的界面等,我实际上正在重用使用更简单的应用程序的代码。但是,当模拟器旋转到横向模式时,会加载正确的视图,但状态栏和视图会保留在iPad的短边上。我附上了截图和代码。视图控制器的问题在链中或appdelegate中更高吗?我已经在调试器中跟踪了被调用的控制器,一旦加载此页面,它们就会被解除。我对obj-c是相当新的,所以有可能这是我想要的简单的东西,但我检查了.xib文件的所有属性,所有东西看起来都是copasetic。
一些代码:
-(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,子视图也不能正确定位。
答案 0 :(得分:0)
就像0x7ffffffff已经说过你需要在你的shouldAutorotate函数中允许旋转。您还需要在项目设置中设置支持的旋转方向。
首先转到项目的设置:
接下来,您需要选择要支持的所有方向:
另一个非常重要的事情:只有根视图控制器才会收到旋转事件。如果将View Controller嵌套在View Controller中,那么嵌套的Controller将不会接收这些事件,除非您从父级手动连接它们。这就是为什么我通常不嵌套ViewControllers但是对嵌套视图使用ad-hoc NSObjects或UIView实现。
最后但并非最不重要:确保您的设备没有旋转锁定:http://www.iphonefaq.org/archives/972915
答案 1 :(得分:0)
问题出现了,因为customerView的子类没有收到轮换通知。在跟踪该类之后,需要设置NSNotificationCenter以进行方向更改,然后允许autoRotation和supprotedInterfaceOrientations。