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];
6 ответов
Я должен был сделать то же самое в приложении камеры. По-видимому, в дополнение к настройке строки состояния, чтобы она не была скрыта, вы также должны сбросить ее стиль после того, как вид с камеры заставит ее исчезнуть. Попробуй это:
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
Решение принятого ответа тем временем устарело.
использование
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
вместо
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
Допустимые значения параметра анимации: UIStatusBarAnimationNone
, UIStatusBarAnimationFade
, UIStatusBarAnimationSlide
, Подробности можно найти в документации.
Прочитав это и обнаружив, что ни один из ответов не сработал, мне удалось заставить его работать, выполнив следующие действия:
• Установка делегата для UIImagePickerController
• В этом делегате скрыть строку состояния в делегате navigationController:didShowViewController:animated:
функция.
НАПРИМЕР:
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
Добавьте свой UIImagePicker в корневое представление (например, Navigation Controller или TabbarController)
[self.tabBarController presentModalViewController:imagePickerController animated:YES];
После этого вы можете использовать
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image
editingInfo:(NSDictionary *)editingInfo
{
// do your stuff
[picker dismissModalViewControllerAnimated:YES];
}
закрыть ваш ImagePicker.
Ни одно из решений не работало на iOS 5.1.1 Решение Тима работало на 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.
Ну, я знаю, что вы не должны этого делать, но если вы создаете подкласс UIImagePickerController, вы можете поместить это в свой пользовательский класс:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
}