Aktualizacje 19 września 2013:
naprawiono błędy skalowania poprzez dodanie
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
poprawione literówki w NSNotificationCenter
zestawieniu
Aktualizacje 12 września 2013:
poprawione UIViewControllerBasedStatusBarAppearance
doNO
dodano rozwiązanie dla aplikacji z obracaniem ekranu
dodano podejście do zmiany koloru tła paska stanu.
Najwyraźniej nie ma możliwości przywrócenia paska stanu systemu iOS7 z powrotem do sposobu działania w systemie iOS6.
Jednak zawsze możemy napisać niektóre kody i zmienić pasek stanu w iOS6, a to jest najkrótszy sposób, jaki mogę wymyślić:
Ustaw UIViewControllerBasedStatusBarAppearance
się NO
w info.plist
(Aby zrezygnować z konieczności widok kontrolerów dostosować status bar styl, dzięki czemu możemy ustawić styl paska stanu przy użyciu metody UIApplicationstatusBarStyle).
W AppDelegate application:didFinishLaunchingWithOptions
zadzwoń
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;
w celu:
Sprawdź, czy to iOS 7.
Ustaw zawartość paska stanu na białą, w przeciwieństwie do UIStatusBarStyleDefault.
Unikaj wyświetlania widoków podrzędnych, których ramki wykraczają poza widoczne granice, aby się nie pokazywały (dla widoków animowanych do widoku głównego od góry).
Stwórz złudzenie, że pasek stanu zajmuje miejsce, podobnie jak w iOS 6, przesuwając i zmieniając ramkę okna aplikacji.
W przypadku aplikacji z obracaniem ekranu
użyj NSNotificationCenter do wykrywania zmian orientacji poprzez dodanie
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
w if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
i utworzyć nową metodę w 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);
}
}
Tak, gdy zmiana orientacji spowoduje wyzwolenie instrukcji przełączania, aby wykryć orientację ekranu aplikacji (Pionowo, Do góry nogami, Poziomo w lewo lub Poziomo w prawo) i odpowiednio zmienić ramkę okna aplikacji, aby stworzyć iluzję paska stanu iOS 6.
Aby zmienić kolor tła paska stanu:
Dodaj
@property (retain, nonatomic) UIWindow *background;
w, AppDelegate.h
aby zrobić background
własność w swojej klasie i zapobiec cofnięciu przydziału przez ARC. (Nie musisz tego robić, jeśli nie używasz ARC.)
Następnie wystarczy utworzyć UIWindow w 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];
Nie zapomnij @synthesize background;
po @implementation AppDelegate
!