Строка состояния 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, если пытаетесь это сделать}