Atualizações em 19 de setembro de 2013:
corrigidos erros de escala adicionando
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
erros de digitação corrigidos na NSNotificationCenter
declaração
Atualizações em 12 de setembro de 2013:
corrigido UIViewControllerBasedStatusBarAppearance
paraNO
adicionou uma solução para aplicativos com rotação de tela
adicionou uma abordagem para alterar a cor de fundo da barra de status.
Aparentemente, não há como reverter a barra de status do iOS7 para como ela funciona no iOS6.
No entanto, sempre podemos escrever alguns códigos e transformar a barra de status no estilo iOS6, e esta é a maneira mais rápida de obter:
Defina UIViewControllerBasedStatusBarAppearance
como NO
in info.plist
(para optar por não permitir que os controladores de exibição ajustem o estilo da barra de status para que possamos definir o estilo da barra de status usando o método UIApplicationstatusBarStyle.)
No AppDelegate application:didFinishLaunchingWithOptions
, ligue para
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;
a fim de:
Verifique se é o iOS 7.
Defina o conteúdo da barra de status como branco, em oposição a UIStatusBarStyleDefault.
Evite a exibição de subvisões cujos quadros ultrapassem os limites visíveis (para vistas que animam na vista principal de cima).
Crie a ilusão de que a barra de status ocupa espaço como no iOS 6, deslocando e redimensionando a moldura da janela do aplicativo.
Para aplicativos com rotação de tela,
use o NSNotificationCenter para detectar alterações de orientação adicionando
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
em if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
e criar um novo método em 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);
}
}
Para que, quando a orientação for alterada, ele acionará uma instrução de chave para detectar a orientação da tela do aplicativo (Retrato, De cabeça para baixo, Paisagem à esquerda ou Paisagem à direita) e alterar o quadro da janela do aplicativo, respectivamente, para criar a ilusão da barra de status do iOS 6.
Para alterar a cor de fundo da sua barra de status:
Adicionar
@property (retain, nonatomic) UIWindow *background;
em AppDelegate.h
fazer background
uma propriedade em sua classe e evitar ARC de retirar a atribuição-lo. (Você não precisa fazer isso se não estiver usando o ARC.)
Depois disso, você só precisa criar o UIWindow em 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];
Não se esqueça de @synthesize background;
depois @implementation AppDelegate
!