Updates am 19. September 2013:
Skalierungsfehler durch Hinzufügen behoben
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
Tippfehler in der NSNotificationCenter
Anweisung korrigiert
Updates am 12. September 2013:
korrigiert UIViewControllerBasedStatusBarAppearance
aufNO
Es wurde eine Lösung für Apps mit Bildschirmrotation hinzugefügt
Es wurde ein Ansatz zum Ändern der Hintergrundfarbe der Statusleiste hinzugefügt.
Es gibt anscheinend keine Möglichkeit, die iOS7-Statusleiste auf die Funktionsweise in iOS6 zurückzusetzen.
Wir können jedoch immer einige Codes schreiben und die Statusleiste in iOS6-ähnlich umwandeln. Dies ist der kürzeste Weg, den ich finden kann:
Setzen Sie UIViewControllerBasedStatusBarAppearance
auf NO
in info.plist
(Um Opt - out der mit View - Controller die Statusleiste Stil anpassen , so dass wir die Statusleiste Stil unter Verwendung des UIApplicationstatusBarStyle Verfahren eingestellt werden.)
In AppDelegate ist application:didFinishLaunchingWithOptions
, Call
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;
damit:
Überprüfen Sie, ob es sich um iOS 7 handelt.
Stellen Sie den Inhalt der Statusleiste im Gegensatz zu UIStatusBarStyleDefault auf Weiß ein.
Vermeiden Sie, dass Unteransichten, deren Rahmen über die sichtbaren Grenzen hinausragen, angezeigt werden (für Ansichten, die von oben in die Hauptansicht animiert werden).
Erstellen Sie die Illusion, dass die Statusleiste wie in iOS 6 Platz beansprucht, indem Sie den Fensterrahmen der App verschieben und seine Größe ändern.
Für Apps mit Bildschirmrotation
Verwenden Sie NSNotificationCenter, um Orientierungsänderungen durch Hinzufügen zu erkennen
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
in if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
und erstellen Sie eine neue Methode 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);
}
}
Wenn sich die Ausrichtung ändert, wird eine switch-Anweisung ausgelöst, um die Bildschirmausrichtung der App (Hochformat, Auf dem Kopf stehend, Querformat links oder Querformat rechts) zu erkennen und den Fensterrahmen der App zu ändern, um die Illusion der iOS 6-Statusleiste zu erzeugen.
So ändern Sie die Hintergrundfarbe Ihrer Statusleiste:
Hinzufügen
@property (retain, nonatomic) UIWindow *background;
in , AppDelegate.h
um background
eine Eigenschaft in der Klasse und zu verhindern , ARC aus ausplanen es. (Sie müssen es nicht tun, wenn Sie ARC nicht verwenden.)
Danach müssen Sie nur noch das UIWindow erstellen 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];
Vergiss nicht @synthesize background;
danach @implementation AppDelegate
!