2010-08-22 1 views
21

Как только я добавлю подпрограмму UIImagePickerController к моему виду, строка состояния исчезает, и я не могу ее вернуть. Есть ли способ сохранить видимость строки состояния?iOS SDK - Как вернуть строку состояния при использовании 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]; 

ответ

29

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

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 
+0

Брэд, это не работает для меня, я делаю это в loadView, viewDidLoad и viewDidAppear все безрезультатно. –

+0

Брэд, это сработало для меня. На самом деле, мне пришлось использовать setStatusBarHidden при переключении между камерой и библиотекой sourceType. – cpungaliya

+0

Как получить дескриптор этой строки состояния, чтобы я мог отображать на нем текст, пока мое приложение находится в фоновом режиме? – Namratha

1

Добавить 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

Привет, Хенрик, спасибо за ваш ответ. Я хочу, чтобы строка состояния была видна все время. Это возможно? – dan

0

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

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 
} 
6

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

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

EG:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
} 
+1

это сработало для меня! – ninjaneer

0

Ни одно из решений не работал на прошивке 5.1.1 решения Тиму работало над прошивкой 4.2.1 Единственным способом, которым я был в состоянии решить эту проблему на прошивке 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.

15

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

Применение

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

вместо

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

Допустимые значения для параметра анимации являются UIStatusBarAnimationNone, UIStatusBarAnimationFade, UIStatusBarAnimationSlide. Детали находятся в documentation.

Смежные вопросы