iOS 6的SDK改变了以往控制UIViewController的方式,为了兼容iOS 5和iOS 6,需要对代码进行必要的调整。因为每个应用的结构不一样,所以再这篇文章中,我只讲了我所遇到的UITabBarController+UINavigationController的应用结构。此外,我也在最后列出了一些情况的解决方法,如果本文的方法对你遇到的问题不起作用,那么可以试试列出的连接给出的解决方法。
1、在工程的设置界面将设备支持的旋转方向开关开启如下图:
2、设置window的rootViewController
在AppDelegate.h中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ...... self.window.rootViewController = tabBarController; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
3、添加UITabBarController的Category
@implementation UITabBarController (Background) -(BOOL)shouldAutorotate { //这里我是首先从全局的角度设置自动旋转为NO,因为不需要每个UIViewController都自动旋转。 return NO; } - (NSUInteger)supportedInterfaceOrientations { //全局设置为 return UIInterfaceOrientationMaskPortrait; } @end @implementation AppDelegate
4、在需要开启自动旋转的UIViewController的.m文件中添加如下代码
//iOS 5以前的旋转控制方法 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { return ((interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown) && (interfaceOrientation != UIInterfaceOrientationLandscapeLeft) && (interfaceOrientation != UIInterfaceOrientationLandscapeRight)); } else { return YES; } } /iOS 6的旋转控制方法 - (BOOL)shouldAutorotate { return YES; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAllButUpsideDown; }
5、其他情况的解决方法参考
http://stackoverflow.com/questions/12522903/uitabbarcontroller-rotation-issues-in-ios-6