Панель состояния 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;
}