2015-10-29 8 views
8

Così ho usato per usare:come animare stato di cambiamento di stile di bar dal iOS 9

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent 
              animated:YES]; 

per animare il cambiamento di stato bar in stile, dal buio alla luce e viceversa

Tuttavia questo metodo è deprecato dal momento che iOS 9.

io cambiato usare preferredStatusBarStyle seguente risposta di @ serenn in preferredStatusBarStyle isn't called

E 'infatti possibile cambiare lo stile barra di stato in vecchio stile, ma senza animazioni.

La documentazione ha detto:

Se il valore restituito da questo metodo cambia, chiamare il metodo setNeedsStatusBarAppearanceUpdate.

Tuttavia non ho idea di dove chiamarlo, ho provato a metterlo in viewWillAppear, ma senza fortuna.

preferredStatusBarUpdateAnimation rimane come predefinita: UIStatusBarAnimationFade

Così mi sono confuso. Alla ricerca di risposte su come animare come metodo deprecato. Grazie in anticipo!

risposta

11

OK Ho trascorso due ore alla ricerca e cercando, capito:

In primo luogo, è necessario assicurarsi che il controller di vista bambino può controllare il bar in stile di stato nel controller di navigazione sovrascrivendo preferredStatusBarStyle come @ di serenn risposta in preferredStatusBarStyle isn't called

al fine di avere l'animazione, devo restituire due stili diversi, prima e dopo il controller della vista appare come di seguito:

-(UIStatusBarStyle)preferredStatusBarStyle { 
    if (!viewAppeared) 
     return UIStatusBarStyleDefault; 
    else 
     return UIStatusBarStyleLightContent; // your own style 
} 

viewAppeared è un BOOL per indicare se il viewWillAppear si chiama:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    viewAppeared = YES; 

    [UIView animateWithDuration:0.8 animations:^{ 
     [self setNeedsStatusBarAppearanceUpdate]; 
    }]; 
} 

-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    viewAppeared = NO; 
} 

Così, quando non appare il controller della vista, la barra di stato è lo stile UIStatusBarStyleDefault cambiare, e cambierà a UIStatusBarStyleLightContent in viewWillAppear.

Quindi chiamare setNeedsStatusBarAppearanceUpdate per aggiornare la modifica come di seguito, essere notato animateWithDuration è un must per avere animazione.

[UIView animateWithDuration:0.8 animations:^{ 
    [self setNeedsStatusBarAppearanceUpdate]; 
}]; 

ho usato per scoprire che non c'è bisogno di chiamare preferredStatusBarStyle prima come qui di seguito, setNeedsStatusBarAppearanceUpdate invocherà preferredStatusBarStyle ancora:

[UIView animateWithDuration:0.8 animations:^{ 
    [self preferredStatusBarStyle]; 
    [self setNeedsStatusBarAppearanceUpdate]; 
}]; 

Anche se questa soluzione risolve il problema, io non scelgo di usalo per ora. Posso avere lo stesso risultato con un solo codice di linea, ma ora sono troppe del codice che devo scrivere. L'API deprecata non fa scattare nemmeno un avvertimento in questo momento, quindi finché Apple non mi spingerà a cambiare, non userò in questo modo. Quando verrà il momento, spero che ci sia una buona soluzione allora.

Sono molto confuso perché Apple ha deprecato il codice a una riga ([UIApplication sharedApplication] setStatusBarStyle]...) che può fare tutti i trucchi, ma utilizzare un più complicato per ottenere lo stesso risultato. Anche se vuoi dare un controllo più preciso, Apple non deve deprecare quello vecchio.

Ma forse proprio non ho trovato il migliore in questo momento. Spero che qualcuno possa illuminarmi.

Problemi correlati