Mises à jour le 19 Sep 2013:
fixe de mise à l'échelle des bugs par l'ajout d'
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
corrigé les fautes de frappe dans l' NSNotificationCenter
déclaration
Les mises à jour sur 12 septembre 2013:
corrigé UIViewControllerBasedStatusBarAppearance
de NO
ajout d'une solution pour les applications avec la rotation de l'écran
ajout d'une approche pour changer la couleur d'arrière-plan de la barre d'état.
Il n'y a, apparemment, pas moyen de revenir à l'iOS7 barre d'état de revenir à la façon dont il fonctionne dans iOS6.
Cependant, nous pouvons toujours écrire des codes et activez la barre d'état en iOS6, et c'est le chemin le plus court que je peux venir avec:
Ensemble UIViewControllerBasedStatusBarAppearance
de NO
en info.plist
(À refuser l'utilisation de contrôleurs de vue de régler le statut de style de la barre de sorte que nous pouvons définir le statut de style de la barre à l'aide de la UIApplicationstatusBarStyle méthode.)
-
Dans AppDelegate de l' application:didFinishLaunchingWithOptions
, appel
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[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;
dans le but de:
Vérifier si c'est iOS 7.
Set barre d'état du contenu de blanc, par opposition à UIStatusBarStyleDefault.
Éviter de sous-vues dont les images s'étendre au-delà du visible limites d'apparaître (pour les vues de l'animation dans la fenêtre principale à partir du haut).
Créer l'illusion que la barre d'état prend de la place, comme la façon dont il est en iOS 6 par le déplacement et le redimensionnement de la fenêtre de l'application du cadre.
Pour les applications avec la rotation de l'écran
utilisation NSNotificationCenter pour détecter les changements d'orientation par l'ajout d'
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
en if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
et de créer une nouvelle méthode dans 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 sorte que, lorsque les changements d'orientation, il sera le déclencheur d'une instruction switch pour détecter application de l'orientation de l'écran (Portrait, la tête en Bas, le Paysage à Gauche, ou le Paysage à Droite) et de modifier l'application du cadre de la fenêtre, respectivement, afin de créer l'iOS 6 barre d'état de l'illusion.
Pour modifier la couleur d'arrière-plan de votre barre d'état:
Ajouter
@property (retain, nonatomic) UIWindow *background;
en AppDelegate.h
faire background
d'une propriété dans votre classe et de prévenir l'ARC de désallocation. (Vous n'avez pas à le faire si vous n'êtes pas à l'aide de l'ARC.)
Après que vous avez juste besoin de créer le UIWindow en if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
:
background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];
N'oubliez pas d' @synthesize background;
après @implementation AppDelegate
!