Оновлення 19 вересня 2013 року:
виправлено помилки масштабування шляхом додавання
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
виправлені помилки у NSNotificationCenter
виписці
Оновлення 12 вересня 2013 року:
виправлено UIViewControllerBasedStatusBarAppearance
доNO
додано рішення для додатків із обертанням екрана
додано підхід до зміни кольору фону в рядку стану.
Мабуть, немає способу повернути рядок стану iOS7 до того, як він працює в iOS6.
Однак ми завжди можемо записати деякі коди і перетворити рядок стану в подібний до iOS6, і це найкоротший шлях, який я можу придумати:
Набір UIViewControllerBasedStatusBarAppearance
для NO
в info.plist
(Щоб відмовитися від того, переглядати контролери налаштувати стиль рядка стану , так що ми можемо поставити стиль рядка стану за допомогою методу UIApplicationstatusBarStyle.)
У програмі AppDelegate application:didFinishLaunchingWithOptions
зателефонуйте
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;
щоб:
Перевірте, чи це iOS 7.
Встановіть вміст рядка стану білим, на відміну від UIStatusBarStyleDefault.
Уникайте, щоб субпогляди, рамки яких виходять за межі видимих меж, не з’являлися (для представлень, що перетворюються на головний вигляд зверху).
Створіть ілюзію, що рядок стану займає простір, як, наприклад, в iOS 6 шляхом зміщення та зміни розміру віконної рамки програми.
Для додатків із обертанням екрана,
використовуйте NSNotificationCenter для виявлення змін орієнтації шляхом додавання
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
в if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
і створити новий метод у 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);
}
}
Так що, коли орієнтація змінюється, вона запустить оператор перемикання, щоб виявити орієнтацію екрана програми (Портрет, Вгору вниз, Пейзаж ліворуч або Пейзаж праворуч) та змінить відповідно віконну рамку програми, щоб створити ілюзію рядка стану iOS 6.
Щоб змінити колір тла рядка стану:
Додайте
@property (retain, nonatomic) UIWindow *background;
в , AppDelegate.h
щоб зробити background
властивість в класі і запобігти ARC від deallocating його. (Вам не доведеться робити це, якщо ви не використовуєте ARC.)
Після цього вам просто потрібно створити вікно UIW у 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];
Не забувайте @synthesize background;
після @implementation AppDelegate
!