2012-03-20 24 views
9

Ho creato un'app che implementa la fotocamera dell'iPhone. Quando l'utente termina il prelievo dell'immagine, riappare la barra di stato! Come faccio ad essere sicuro che la barra di stato rimanga nascosta?iPhone - Rimuovi la barra di stato a livello di programmazione

Ecco il mio codice:

-(IBAction)pickImage:(id)sender { 
UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
[self presentModalViewController:picker animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[picker dismissModalViewControllerAnimated:YES]; 
background.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

} 

Se sto facendo qualcosa di sbagliato, si prega di indicarlo! Grazie, Rafee

+0

Se imposta la barra di stato in modo che sia inizialmente nascosta nelle tue informazioni app.la barra di stato rimarrà nascosta. –

+1

No, la barra di stato non resterà nascosta. Ho appena fatto un test su questo; sembra essere un bug, che è al 100% duplicabile (almeno per me) su dismissModalViewController per un UIImagePicker con tipo UIImagePickerControllerSourceTypeSavedPhotosAlbum. Questo non succede per Camera o PhotoLibrary. –

risposta

29
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 

si può optare per un altro stile di animazione se non del tutto.

+0

C'è un bug in UIKit, che l'OP sta vivendo. –

+0

Funziona perfettamente, ha avuto lo stesso problema con imagePicker –

+0

deprecato in iOS 9 ora – cdub

0

Sembra esserci un bug nel meccanismo di chiusura di UIViewController associato a UIImagePicker, con un sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum.

Il momento della chiamata al dismissModalViewController (più il metodo con il completamento :) proprietà nascosto barra di stato del UIApplication cambia istantaneamente da YES a NO, ed è disegnato al momento della scavalcando respingere ...

Questo è davvero ovvio per le app che utilizzano una visualizzazione a schermo intero. Il mio attuale progetto di app funziona, oltre a controllare il fotogramma della vista del controller di visualizzazione prima della presentazione, quindi UIImagePicker NON è a schermo intero. Questo ha reso il bug MOLTO ovvio. Ho trascorso 4-5 ore a determinare la causa, e questa era l'ultima conclusione certa, e il bug NON si verificava per sourceType Camera né PhotoLibrary.

Quindi, se si desidera una full-screen app perfettamente e desidera presentare un UIImagePicker privo di bug, evitare UIImagePickerControllerSourceTypeSavedPhotosAlbum

20

In iOS 7, v'è un metodo su UIViewController, "prefersStatusBarHidden". Per nascondere la barra di stato, aggiungere questo metodo per il vostro controller della vista e tornare SI:

- (BOOL) prefersStatusBarHidden 
{ 
    return YES; 
} 
0

Gran spedizione centrale è tuo amico, con questo metodo non si vedrà la barra di stato appaiono affatto quando viene visualizzato il selettore o successivamente

- (void)hideStatusBar 
{ 
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
    { 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; 
    } 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} 

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self hideStatusBar]; 
    double delayInSeconds = 0.2; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self hideStatusBar]; 
    }); 
} 
4

in questo caso, stiamo usando 2 passi

nel primo passaggio: Cestino info.plist: "Vedi controller-based barra di stato l'aspetto" con il valore "NO"

In Secondo passo: Usare/chiamare questo codice con delegato del UIImagePickerController

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if([navigationController isKindOfClass:[UIImagePickerController class]]) 
     [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
} 
1

Con iOS 7 e versioni successive, è possibile utilizzare il seguente codice per nascondere e visualizzare la barra di stato,

@interface ViewController() 

@property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; 

@end 

@implementation ViewController 


    ... other codes 

- (BOOL)prefersStatusBarHidden { 
    return self.isStatusBarHidden; 
} 

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { 
    return UIStatusBarAnimationFade; 
} 

- (void)hideStatusBar { 
    self.statusBarHidden = YES; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

- (void)showStatusBar { 
    self.statusBarHidden = NO; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

@end 
Problemi correlati