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

Я попытался установить для Info.plist "Просмотр внешнего вида строки состояния на контроллере" значение NO, я попытался вызвать

[[UIApplication sharedApplication] setStatusBarHidden:YES];

я пробовал

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

Я пытался запустить сборщик с

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

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

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

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

РЕДАКТИРОВАТЬ: Мой желаемый эффект заключается в том, что строка состояния отображается каждый в приложении, за исключением выбора камеры и некоторых других контроллеров представления "вне" (связанных с электронной почтой), которые мы используем.

9 ответов

Решение

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

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

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

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end

Попробуй это:

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

в вашем приложении делегат.

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

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];

в метод viewWillDisappear подкласса UIImagePickerController.

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

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

Вы должны покинуть

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

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

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

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

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

"Просмотр внешнего вида строки состояния на основе контроллера", установленный на "НЕТ", работает для меня.

Я был на этой ошибке для восстановления 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, если пытаетесь это сделать}

Другие вопросы по тегам