Aggiornamenti del 19 settembre 2013:
corretti bug di ridimensionamento aggiungendo
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
errori di battitura corretti nella NSNotificationCenter
dichiarazione
Aggiornamenti del 12 settembre 2013:
corretto UIViewControllerBasedStatusBarAppearance
aNO
aggiunta una soluzione per app con rotazione dello schermo
aggiunto un approccio per cambiare il colore di sfondo della barra di stato.
Apparentemente, non c'è modo di ripristinare la barra di stato di iOS7 su come funziona in iOS6.
Tuttavia, possiamo sempre scrivere alcuni codici e trasformare la barra di stato in stile iOS6, e questo è il modo più breve che posso trovare:
Impostato UIViewControllerBasedStatusBarAppearance
su NO
in info.plist
(per disattivare la visualizzazione dei controller di visualizzazione per regolare lo stile della barra di stato in modo da poter impostare lo stile della barra di stato utilizzando il metodo UIApplicationstatusBarStyle.)
In AppDelegate's application:didFinishLaunchingWithOptions
, chiama
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds =YES;
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
//Added on 19th Sep 2013
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
}
return YES;
in modo da:
Controlla se è iOS 7.
Imposta il contenuto della barra di stato su bianco, anziché su UIStatusBarStyleDefault.
Evita che vengano visualizzate le viste secondarie i cui frame si estendono oltre i limiti visibili (per le viste che si animano nella vista principale dall'alto).
Crea l'illusione che la barra di stato occupi spazio come in iOS 6 spostando e ridimensionando il riquadro della finestra dell'app.
Per le app con rotazione dello schermo,
utilizzare NSNotificationCenter per rilevare le modifiche all'orientamento aggiungendo
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
in if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
e creare un nuovo metodo in AppDelegate:
- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue];
int w = [[UIScreen mainScreen] bounds].size.width;
int h = [[UIScreen mainScreen] bounds].size.height;
switch(a){
case 4:
self.window.frame = CGRectMake(0,20,w,h);
break;
case 3:
self.window.frame = CGRectMake(-20,0,w-20,h+20);
break;
case 2:
self.window.frame = CGRectMake(0,-20,w,h);
break;
case 1:
self.window.frame = CGRectMake(20,0,w-20,h+20);
}
}
In tal modo, quando l'orientamento cambia, attiverà un'istruzione switch per rilevare l'orientamento dello schermo dell'app (Ritratto, Upside-down, Orizzontale a sinistra o Orizzontale a destra) e modificare rispettivamente il riquadro della finestra dell'app per creare l'illusione della barra di stato di iOS 6.
Per modificare il colore di sfondo della barra di stato:
Inserisci
@property (retain, nonatomic) UIWindow *background;
in AppDelegate.h
per fare background
una proprietà nella classe e impedire ARC da deallocando esso. (Non è necessario farlo se non si utilizza ARC.)
Dopodiché devi solo creare la UIWindow in if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
:
background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];
Non dimenticare di @synthesize background;
dopo @implementation AppDelegate
!