2010-08-22 9 views
21

Non appena aggiungo una vista secondaria UIImagePickerController alla mia vista, la barra di stato scompare e non riesco a recuperarla. C'è un modo per mantenere visibile la barra di stato?iOS SDK - Come recuperare la barra di stato quando si utilizza 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]; 

risposta

29

Ho dovuto fare la stessa cosa anche in un'app per fotocamere. Apparentemente, oltre a impostare la barra di stato per non essere nascosta, devi anche resettare il suo stile dopo che la vista della telecamera lo fa sparire. Prova questo:

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

Brad, questo non funziona per me, lo sto facendo in loadView, viewDidLoad e viewDidAppear tutto senza alcun risultato. –

+0

Brad, questo ha funzionato bene per me. In effetti, ho dovuto usare setStatusBarHidden quando si passa tra la fotocamera e la libreria di foto sourceType. – cpungaliya

+0

Come posso ottenere un handle su questa barra di stato in modo che possa visualizzare del testo mentre la mia applicazione è in background? – Namratha

1

Aggiungi il tuo UIImagePicker alla visualizzazione principale (vale a dire un controller di navigazione o TabbarController)

[self.tabBarController presentModalViewController:imagePickerController animated:YES]; 

Dopo di che è possibile utilizzare

- (void)imagePickerController:(UIImagePickerController *)picker 
      didFinishPickingImage:(UIImage *)image 
         editingInfo:(NSDictionary *)editingInfo 
{ 
     // do your stuff 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

chiudere il tuo ImagePicker.

+0

Ciao Henrik, grazie per la tua risposta. Voglio sempre la barra di stato visibile. È possibile? – dan

0

bene, lo so che non sono tenuti a farlo, ma se si sottoclasse UIImagePickerController, si può mettere che nella classe personalizzata:

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

Dopo aver letto questo e non trovandone delle risposte hanno lavorato, sono riuscito a farlo funzionare nel modo seguente:

• Impostazione di un delegato per l'UIImagePickerController
• in questo delegato, nascondere la barra di stato nella navigationController:didShowViewController:animated: fu del delegato nzioni.

EG:

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

questo ha funzionato per me! – ninjaneer

0

Nessuna delle soluzioni lavorato su iOS 5.1.1 soluzione di Tim ha lavorato su iOS 4.2.1 L'unico modo sono stato in grado di risolvere il problema su iOS 5.1.1 è stato come che

-(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]; 
}); 

che è molto hacky e sbagliato.

Ho trascorso mezza giornata a cercare una soluzione e ho deciso di utilizzare solo l'approccio AVFoundation e mi ci è voluta un'ora per implementare la stessa acquisizione di base della foto che avevo bisogno di utilizzare AVCaptureSession e AVCaptureStillImageOutput. E funziona anche meglio - AVCaptureSession si avvia più velocemente di UIImagePickerController e AVCaptureVideoPreviewLayer ha una frequenza dei fotogrammi molto migliore sui dispositivi moderni rispetto all'anteprima della fotocamera UIImagePicker.

15

La soluzione della risposta accettata è diventata deprecata nel frattempo.

Uso

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

anziché

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

valori validi per il parametro animazione sono UIStatusBarAnimationNone, UIStatusBarAnimationFade, UIStatusBarAnimationSlide. I dettagli si trovano nello documentation.

Problemi correlati