Actualizaciones el 19 de septiembre de 2013:
Se corrigieron errores de escala agregando
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
errores tipográficos corregidos en la NSNotificationCenter
declaración
Actualizaciones el 12 de septiembre de 2013:
corregido UIViewControllerBasedStatusBarAppearance
aNO
Se agregó una solución para aplicaciones con rotación de pantalla
Se agregó un enfoque para cambiar el color de fondo de la barra de estado.
Aparentemente, no hay forma de revertir la barra de estado de iOS7 a cómo funciona en iOS6.
Sin embargo, siempre podemos escribir algunos códigos y convertir la barra de estado en iOS6, y esta es la forma más corta que puedo encontrar:
Establecer UIViewControllerBasedStatusBarAppearance
a NO
deinfo.plist
(Para optar por que los controladores de vista ajustar el estilo de barra de estado para que podamos establecer el estilo de barra de estado utilizando el método UIApplicationstatusBarStyle).
En AppDelegate's application:didFinishLaunchingWithOptions
, llame
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 fin de que:
Comprueba si es iOS 7.
Establezca el contenido de la barra de estado para que sea blanco, en lugar de UIStatusBarStyleDefault.
Evite que aparezcan subvistas cuyos marcos se extienden más allá de los límites visibles (para las vistas que animan a la vista principal desde arriba).
Cree la ilusión de que la barra de estado ocupa espacio como en iOS 6 al cambiar y cambiar el tamaño del marco de la ventana de la aplicación.
Para aplicaciones con rotación de pantalla,
use NSNotificationCenter para detectar cambios de orientación agregando
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
en if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
y crear un nuevo método en 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);
}
}
De modo que cuando cambie la orientación, se activará una instrucción de cambio para detectar la orientación de la pantalla de la aplicación (vertical, invertida, horizontal izquierda o horizontal derecha) y cambiar el marco de la ventana de la aplicación respectivamente para crear la ilusión de la barra de estado de iOS 6.
Para cambiar el color de fondo de su barra de estado:
Añadir
@property (retain, nonatomic) UIWindow *background;
en AppDelegate.h
para hacer background
una propiedad en su clase y prevenir arco desde desasignar ella. (No tiene que hacerlo si no está utilizando ARC).
Después de eso, solo necesita crear la UIWindow en 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];
¡No te olvides de @synthesize background;
después @implementation AppDelegate
!