Status bar and navigation bar issue in IOS7

前端 未结 11 1789
眼角桃花
眼角桃花 2020-11-22 10:10

I am migrating my application to iOS 7. For handing the status bar issue I have added this code

if([[[UIDevice currentDevice] systemVersion] floatValue] >         


        
11条回答
  •  清酒与你
    2020-11-22 10:21

    Hear we can do this for all views at once

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {
    // Notification for the orientaiton change
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationDidChangeStatusBarOrientation:)
                                                 name:UIApplicationDidChangeStatusBarOrientationNotification
                                               object:nil];
    
    // Window framing changes condition for iOS7 or greater
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        statusBarBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, self.window.frame.size.width, 20)];//statusBarBackgroundView is normal uiview
        statusBarBackgroundView.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.730];
        [self.window addSubview:statusBarBackgroundView];
        self.window.bounds = CGRectMake(0, -20, self.window.frame.size.width, self.window.frame.size.height);
    }
    // Window framing changes condition for iOS7 or greater
    
    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    
    
    return YES;
    }
    

    And While we are using orientation we can add below method in app delegate to set it via orientation.

    - (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
    {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        statusBarBackgroundView.hidden = YES;
        UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
        int width = [[UIScreen mainScreen] bounds].size.width;
        int height = [[UIScreen mainScreen] bounds].size.height;
    
        switch (orientation) {
            case UIInterfaceOrientationLandscapeLeft:
                self.window.bounds =  CGRectMake(-20,0,width,height);
                statusBarBackgroundView.frame = CGRectMake(-20, 0, 20, height);
                break;
            case UIInterfaceOrientationLandscapeRight:
                self.window.bounds =  CGRectMake(20,0,width,height);
                statusBarBackgroundView.frame = CGRectMake(320, 0, 20, height);
                break;
            case UIInterfaceOrientationPortraitUpsideDown:
                statusBarBackgroundView.frame = CGRectMake(0, 568, width, 20);
                self.window.bounds =  CGRectMake(0, 20, width, height);
                break;
            default:
                statusBarBackgroundView.frame = CGRectMake(0, -20, width, 20);
                self.window.bounds =  CGRectMake(0, -20, width, height);
                break;
        }
        statusBarBackgroundView.hidden = NO;
    }
    }
    

    You should Add below navigation controller category for it

    .h

    #import 
    #import 
    @interface UINavigationController (iOS6fix)
    
    @end
    

    .m

    #import "UINavigationController+iOS6fix.h"
    @implementation UINavigationController (iOS6fix)  
    
    -(BOOL)shouldAutorotate
    {
          return [[self.viewControllers lastObject] shouldAutorotate];
    }
    
    -(NSUInteger)supportedInterfaceOrientations
    {
          return [[self.viewControllers lastObject] supportedInterfaceOrientations];
    }
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
         return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
    }
    
    @end
    

提交回复
热议问题