iOS SDK - Как вернуть строку состояния при использовании UIImagePickerController? - PullRequest
22 голосов
/ 22 августа 2010

Как только я добавляю к моему представлению вложенное представление 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 ]

29 голосов
/ 21 сентября 2010

Я должен был сделать то же самое в приложении камеры. Видимо, в дополнение к настройке строки состояния, чтобы она не была скрыта, вам также придется сбросить ее стиль после того, как вид с камеры заставит ее исчезнуть. Попробуйте это:

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
15 голосов
/ 12 августа 2013

Решение принятого ответа тем временем устарело.

Используйте

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

вместо

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];

Допустимые значения для параметра анимации: UIStatusBarAnimationNone, UIStatusBarAnimationFade, UIStatusBarAnimationSlide.Подробности можно найти в документации .

6 голосов
/ 16 июня 2012

Прочитав это и обнаружив, что ни один из ответов не сработал, мне удалось заставить его работать, выполнив следующие действия:

• Установка делегата для UIImagePickerController• В этом делегате скрыть строку состояния в функции делегата navigationController:didShowViewController:animated:.

EG:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}
1 голос
/ 22 августа 2010

Добавьте ваш 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.

0 голосов
/ 02 сентября 2012

Ни одно из решений не работало на 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.

0 голосов
/ 05 февраля 2011

хорошо, я знаю, что вы не должны этого делать, но если вы подкласс UIImagePickerController, вы можете поместить это в свой пользовательский класс:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...