Mises à jour du 19 septembre 2013:
correction des bogues de mise à l'échelle en ajoutant
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
fautes de frappe corrigées dans la NSNotificationCenter
déclaration
Mises à jour du 12 septembre 2013:
corrigé UIViewControllerBasedStatusBarAppearance
àNO
ajouté une solution pour les applications avec rotation d'écran
ajouté une approche pour changer la couleur d'arrière-plan de la barre d'état.
Il n'y a apparemment aucun moyen de ramener la barre d'état iOS7 à son fonctionnement dans iOS6.
Cependant, nous pouvons toujours écrire des codes et transformer la barre d'état en iOS6, et c'est le moyen le plus court que je puisse trouver:
Défini UIViewControllerBasedStatusBarAppearance
sur NO
in info.plist
(pour désactiver la possibilité pour les contrôleurs de vue d'ajuster le style de la barre d'état afin que nous puissions définir le style de la barre d'état à l'aide de la méthode UIApplicationstatusBarStyle.)
Dans AppDelegate application:didFinishLaunchingWithOptions
, appelez
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;
afin de:
Vérifiez si c'est iOS 7.
Définissez le contenu de la barre d'état sur blanc, par opposition à UIStatusBarStyleDefault.
Évitez que les sous-vues dont les images s'étendent au-delà des limites visibles ne s'affichent (pour les vues animées dans la vue principale depuis le haut).
Créez l'illusion que la barre d'état prend de la place comme dans iOS 6 en déplaçant et en redimensionnant le cadre de la fenêtre de l'application.
Pour les applications avec rotation d'écran,
utiliser NSNotificationCenter pour détecter les changements d'orientation en ajoutant
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
dans if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
et créez 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 l'orientation change, il déclenche une instruction de commutation pour détecter l'orientation de l'écran de l'application (Portrait, à l'envers, paysage gauche ou paysage droit) et modifier le cadre de la fenêtre de l'application respectivement pour créer l'illusion de la barre d'état iOS 6.
Pour modifier la couleur d'arrière-plan de votre barre d'état:
Ajouter
@property (retain, nonatomic) UIWindow *background;
en AppDelegate.h
pour faire background
une propriété dans votre classe et empêcher l' ARC de désaffecter il. (Vous n'êtes pas obligé de le faire si vous n'utilisez pas ARC.)
Après cela, il vous suffit de créer l'interface utilisateur dans 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'oubliez pas @synthesize background;
après @implementation AppDelegate
!