IOS SDK - Как вернуть строку статуса при использовании UIImagePickerController?
Как только я добавлю подпрограмму UIImagePickerController к моему виду, строка состояния исчезает, и я не могу ее вернуть. Есть ли способ сохранить видимость строки состояния?
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self.view addSubview:imagePicker.view];
[imagePicker viewWillAppear:YES];
[imagePicker viewDidAppear:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
Ответы
Ответ 1
Я должен был сделать то же самое и в приложении для камеры. По-видимому, помимо того, что строка состояния не скрыта, вы также должны reset ее стиль после того, как вид камеры исчезнет. Попробуйте следующее:
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
Ответ 2
В то же время принятое решение ответа устарело.
Используйте
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
вместо
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
Допустимыми значениями для параметра анимации являются UIStatusBarAnimationNone
, UIStatusBarAnimationFade
, UIStatusBarAnimationSlide
. Подробности находятся в documentation.
Ответ 3
Прочитав это и не найдя ни одного из полученных ответов, мне удалось заставить его работать, выполнив следующие действия:
• Установка делегата для UIImagePickerController
• В этом делетете скрыть строку состояния в функции делегата navigationController:didShowViewController:animated:
.
например:
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
Ответ 4
Добавьте ваш UIImagePicker в корневой режим (т.е. контроллер навигации или TabbarController)
[self.tabBarController presentModalViewController:imagePickerController animated:YES];
После этого вы можете использовать
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo
{
// do your stuff
[picker dismissModalViewControllerAnimated:YES];
}
чтобы закрыть ImagePicker.
Ответ 5
ну, я знаю, что вы не должны это делать, но если вы подклассифицируете UIImagePickerController, вы можете поместить это в свой собственный класс:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
}
Ответ 6
Ни одно из решений, работающих в iOS 5.1.1
Решение Tim работало на iOS 4.2.1
Единственный способ, которым я смог исправить проблему на iOS 5.1.1, был таким, как
-(void)viewDidAppear:(BOOL)animated
{
double delayInSeconds = 0.01;
dispatch_time_t popTime =
dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[[UIApplicationsharedApplication] setStatusBarHidden:NO];
});
который является очень хакивым и неправильным.
Я потратил пол дня на поиски решения, а затем решил просто использовать подход AVFoundation, и мне потребовался час, чтобы реализовать тот же базовый захват фотографий, который мне нужен, используя AVCaptureSession и AVCaptureStillImageOutput. И он работает лучше - AVCaptureSession запускается быстрее, чем UIImagePickerController, и AVCaptureVideoPreviewLayer имеет гораздо лучшую частоту кадров на современных устройствах по сравнению с предварительным просмотром камеры UIImagePicker.