alphanumeric character
alphanumeric character

Reputation: 141

iOS 7 status bar overlaps camera controls on UIImagePickerController

I've tried setting the Info.plist 'View controller-based status bar appearance' to NO, I've tried calling

[[UIApplication sharedApplication] setStatusBarHidden:YES];

I've tried

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

I've tried launching the picker with

[self presentViewController:picker animated:NO completion:^{
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

And still, there is a status bar overlapping the camera controls. It's only there in iOS 7 though.

The status bar doesn't show up any where else in the app. I feel like I'm missing an important piece of the puzzle here, and no amount of reading about the View Controller or UIImagePickerController has helped me find said puzzle piece.

I'm hoping some one else has a little insight into this problem. Thank you.

EDIT: My desired effect is that the Status Bar shows up every in the app, except on the camera picker and a few other "outside" (Email related) view controllers we use.

Upvotes: 7

Views: 10453

Answers (9)

Erik Escobedo
Erik Escobedo

Reputation: 2803

This is what worked for me:

@implementation ViewController {
    BOOL hideStatusBar;
}

- (void)showCamera {
    UIImagePickerController *camera = [[UIImagePickerController alloc] init];
    camera.modalPresentationStyle = UIModalPresentationCurrentContext;
    camera.sourceType = UIImagePickerControllerSourceTypeCamera;
    camera.delegate = self;

     hideStatusBar = YES;
    [self setNeedsStatusBarAppearanceUpdate];
    [self presentViewController:camera animated:YES completion:nil];
}

-(BOOL)prefersStatusBarHidden{
    return hideStatusBar;
}

Upvotes: 0

alphanumeric character
alphanumeric character

Reputation: 141

I think the answer to this question is "This is an iOS 7 bug". None of the methods here helped in our case, and several people have tried to fix this now.

I can't say what steps to reproduce this, but I've seen enough people out there with the same issue, that I think it's safe to say that this is in fact an iOS 7 bug. Most people can fix this problem with the multiple methods listed above. Rarely though, you can't fix it that way. I hope if you are reading this, you are not also one of those people.

Upvotes: 0

user1435707
user1435707

Reputation: 111

I've been on this bug for repairing ToonPAINT for iOS7 and the thing that finally worked other than setting the two things in the Info.plist file (Status bar is initially hidden = NO; View controller-based status bar appearance = NO)

was to change the style of the status bar (even though I didn't want it shown at all); It was not enough to just hide the status bar; sounds like an iOS7 bug.

In the app delegate add:

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

{NB .. UIStatusBarStyleBlackTranslucent is deprecated, probably use UIStatusBarStyleLightContent if trying this}

Upvotes: 0

Magurizio
Magurizio

Reputation: 300

The PsychoDad method works for me. I put the following

[[UIApplication sharedApplication] setStatusBarHidden:YES];

into the method viewWillDisappear of subclass of UIImagePickerController.

But the Alexandru Dranca method is better because in that way the status bar don't appear at all!

However I think this is a BUG of IOS 7...

Upvotes: 1

voxlet
voxlet

Reputation: 311

If you want to keep ViewController-Based Status Bar Appearance, subclass UIImagePickerController and override prefersStatusBarHidden and childViewControllerForStatusBarHidden.

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end

Upvotes: 17

mike
mike

Reputation: 31

you should leave the

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

and also add this

-(void)viewWillAppear:(BOOL)animated {
    ...
    [self setNeedsStatusBarAppearanceUpdate];
    ...
}

Upvotes: 0

Alexandru Dranca
Alexandru Dranca

Reputation: 830

Try this :

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

in your appDelegate.

Upvotes: 7

JerryZhou
JerryZhou

Reputation: 5166

"View controller-based status bar appearance" set to NO, works for me.

Upvotes: 0

Aaron Golden
Aaron Golden

Reputation: 7102

There's an additional setting you need to turn on, starting in iOS 7. In your app's Info.plist, add a line for View controller-based status bar appearance, a Boolean, and set it to NO.

Upvotes: 3

Related Questions