Search code examples
ios7uiimagepickercontrollerios8statusbaroverlapping

Statusbar overlapping on UIImagepickercontroller's Camera View in iOS 7 and iOS 8


im using UIImagepickercontroller to take photo and choose existing photos, when the camera view appears, the top portion on camera was covered by the white status bar. How can i remove the status bar or hide the status bar. Many of them saying its a ios 7 bug, it has been fixed in ios 7.1, but still i'm facing this problem.

This is my code to show the imagepickerController

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = (id)self;
imagePicker.sourceType = (buttonIndex == actionSheet.firstOtherButtonIndex ?  

UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypePhotoLibrary);
[self.viewController presentViewController:imagePicker animated:YES completion:nil]; 

Also i tried by with below codes to hide statusbar

 - (void)navigationController:(UINavigationController *)navigationController    
  willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
 {
   [[UIApplication sharedApplication] setStatusBarHidden:YES];
   }

This

 -(BOOL) prefersStatusBarHidden {
   return YES;
 }

And This in Delegate

 [UIApplication ShareApplication]SetStatusbarHidden:YES];

Right now i'm working with ios8, and this behaviour happening in all ios version. Please help me out.


Solution

  • Actually the problem is in my rootviewcontroller i'm creating a Statusbar using UIView and setting its constraints for landscape and portrait programmatically

    - (void)setTopBar {
    if(topBar == nil && [[UIApplication sharedApplication] keyWindow] != nil) {
        topBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
        topBar.backgroundColor = navController.view.backgroundColor;
        topBar.tag = topBarViewTag;
        UIView *containerView = [[UIApplication sharedApplication] keyWindow];
        [containerView addSubview:topBar];
        [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view(20)]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil   views:@{@"view" : topBar}]];
        [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil   views:@{@"view" : topBar}]];
        [containerView layoutSubviews];
    }
    

    }

    so when i commented the above method in ViewwillAppear, status bar where not showing up, so the problem is with my code.

    if anyone face the same issue, i suggest you to have a look on your RootViewcontroller, which acts a navigation to all other classes.