ios6.0 UINavigationController、UITabBarController 支持屏幕自动旋转问题

1、描述

      self.window.rootViewController = UINavigationController 或 UITabBarController。

或者是混合使用的,如: UINavigationController 下包含UITabBarController

     因  UINavigationController、UITabBarController 也是 UIViewController,所以会覆盖其子页面的旋转方法

2、解决,添加类

@interface UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate;
-(NSUInteger)supportedInterfaceOrientations;
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;

@end

#import "UINavigationController+Rotation_IOS6.h"

@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate {
    
    NSLog(@"UINavigationController 100");
    // 不想其子页面支持旋转, 可直接返回 NO
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations {
    NSLog(@"UINavigationController 200");
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    NSLog(@"UINavigationController 300");
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end

@interface UITabBarController (Rotation_IOS6)

-(BOOL)shouldAutorotate;
-(NSUInteger)supportedInterfaceOrientations;
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;

@end

@implementation UITabBarController (Rotation_IOS6)

-(BOOL)shouldAutorotate {
    NSLog(@"UITabBarController 100");
    // 不想其子页面支持旋转,可直接返回 NO
    return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations {
     NSLog(@"UITabBarController 200"); 
    //return UIInterfaceOrientationMaskPortrait;
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    NSLog(@"UITabBarController 300"); //return UIInterfaceOrientationPortrait;
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}@end

 3、AppDelegate.m 中 使用

#import "UINavigationController+Rotation_IOS6.h"
#import "UITabBarController+Rotation_IOS6.h"

4、自定义的 UIViewController 中再设置对应的旋转方法

- (BOOL)shouldAutorotate {
- (NSUInteger)supportedInterfaceOrientations{
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{

5、ios5 支持屏幕旋转

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


你可能感兴趣的:(ios6.0 UINavigationController、UITabBarController 支持屏幕自动旋转问题)