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 NSNotificationCenterzestawieniu
Aktualizacje 12 września 2013:
poprawione UIViewControllerBasedStatusBarAppearancedoNO
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 UIViewControllerBasedStatusBarAppearancesię NOw 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:didFinishLaunchingWithOptionszadzwoń
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.haby zrobić backgroundwł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!