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.