Панель состояния iOS 7 перекрывает элементы управления камерой на UIImagePickerController

Я пробовал установить для Info.plist "Просмотр состояния строки на основе контроллера" в НЕТ, я пробовал позвонить

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Я пробовал

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

Я пробовал запустить сборщик с помощью

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

И все же, есть панель состояния, перекрывающая элементы управления камерой. Это только там, в iOS 7, хотя.

Строка состояния не отображается в другом месте приложения. Я чувствую, что здесь не хватает важной части головоломки, и никакое количество чтения о контроллере View или UIImagePickerController не помогло мне найти кусочек головоломки.

Я надеюсь, что у кого-то еще есть небольшое понимание этой проблемы. Спасибо.

EDIT: Мой желаемый эффект заключается в том, что строка состояния отображается каждый в приложении, за исключением панели выбора камеры и нескольких других "внешних" (связанных с электронной почтой) контроллеров представления, которые мы используем.

Ответ 1

Я думаю, что ответ на этот вопрос: "Это ошибка iOS 7". В нашем случае ни один из методов не помог, и несколько человек попытались исправить это сейчас.

Я не могу сказать, какие шаги воспроизвести это, но я видел достаточно людей там с той же проблемой, что, я думаю, можно с уверенностью сказать, что это на самом деле ошибка iOS 7. Большинство людей могут решить эту проблему с помощью нескольких методов, перечисленных выше. Редко, хотя вы не можете это исправить. Я надеюсь, что если вы читаете это, вы также не являетесь одним из этих людей.

Ответ 2

Если вы хотите сохранить ViewController-Based Status Bar Appearance, подкласс UIImagePickerController и переопределить prefersStatusBarHidden и childViewControllerForStatusBarHidden.

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end

Ответ 3

Попробуйте следующее:

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

в приложении appDelegate.

Ответ 4

Появится дополнительный параметр, который нужно включить, начиная с iOS 7. В вашем приложении Info.plist добавьте строку для View controller-based status bar appearance, логическую и установите для нее значение NO.

Ответ 5

Метод PsychoDad работает для меня. Я поставил следующие

[[UIApplication sharedApplication] setStatusBarHidden:YES];

в представлении методаWillDisappear подкласса UIImagePickerController.

Но метод Alexandru Dranca лучше, потому что таким образом строка состояния вообще не отображается!

Однако я думаю, что это BUG IOS 7...

Ответ 6

"Просмотр состояния строки состояния на основе контроллера" установлен на NO, работает для меня.

Ответ 7

вам следует оставить

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

а также добавьте это

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

Ответ 8

Я был в этой ошибке для исправления ToonPAINT для iOS7 и того, что, в конце концов, работало иначе, чем установка двух вещей в файле Info.plist(строка состояния изначально скрыта = НЕТ; Просмотр состояния строки состояния на основе контроллера = НЕТ)

должен был изменить стиль строки состояния (хотя я вообще не хотел его показывать); Недостаточно просто скрыть строку состояния; звучит как ошибка iOS7.

В делегате приложения добавьте:

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

{NB.. UIStatusBarStyleBlackTranslucent устарел, возможно, используйте UIStatusBarStyleLightContent, если вы пытаетесь это сделать.

Ответ 9

Это то, что сработало для меня:

@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;
}