Обновления от 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);
}
}
Чтобы при изменении ориентации он вызывал оператор switch для определения ориентации экрана приложения («Портрет», «Перевернутый вниз», «Пейзаж влево» или «Пейзаж вправо») и соответственно изменял рамку окна приложения, создавая иллюзию строки состояния iOS 6.
Чтобы изменить цвет фона строки состояния:
Добавить
@property (retain, nonatomic) UIWindow *background;
в , AppDelegate.h
чтобы сделать background
свойство в классе и предотвратить ARC от deallocating его. (Вам не нужно делать это, если вы не используете ARC.)
После этого вам просто нужно создать UIWindow в 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
!