在应用启动时,界面方向不会更改为横向

问题描述

|| 我陷入一个使我发疯的问题! 我有一个以TabBarViewController开头的iPad应用程序。每个Tab都有自己的ViewController和nib文件。 为了使界面方向成为可能,我将所有方向都添加到了info.plist并将其TabBarController子类化为设置:
        - (BOOL)shouldAutorotatetoInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
}
如果旋转界面,每个视图都会自动调整大小和格式,以显示正确的方向。如果我在模拟器中对其进行测试,那么一切看起来都很好,并且我可以在方向之间旋转。 现在,让我疯狂的一点是: 如果我以纵向模式启动该应用程序,则一切正常..但是,如果我以横向模式启动,则出现错误,并且当模拟器处于横向模式时,我的界面方向仍为纵向! 错误
2011-05-24 21:50:15.011 Project[57995:207] Using two-stage rotation animation. To use the smoother single-stage animation,this application must remove two-stage method implementations.
我检查了这样的方向:
    -(void)viewWillAppear:(BOOL)animated{

    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];



    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) {
        NSLog(@\"Orientation: Landscape\");
    }
    else{
        NSLog(@\"Orientation: Portrait\");
    }

}
日志说如果我在横向模式下启动,它处于“横向”模式,但是如果我将选项卡更改为另一个模式,则看起来很糟糕,因为视图以纵向模式显示。 回到我要求定向的开始视图时,日志显示\“ Portrait \”…,但是模拟器仍然是横向的! 我不知道为什么开始时方向是纵向,… 即使我从风景开始... 任何想法如何解决这个问题?     

解决方法

好。因此,文档说“ 3”在所有动画之前都被调用。当您的应用启动时,其初始方向为
Portrait
。根据您的方向,然后旋转到该方向。由于它动画于屏幕外的方向,因此必须在
viewWillAppear:
之后调用/,因此当调用
viewWillAppear:
时,它仍位于
Portrait
中。我自己测试过。     ,我解决了问题! 只需在我所有视图的viewWillAppear方法中使用此方法,即可使其在横向模式下启动时起作用:
if(([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || ([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeRight)){        
    //Landscape View
}
else{
    //Portrait View
}
对我来说很好!