49 votes

Barre d'état iOS 7 se chevauchant

J'ai récemment effectué une mise à niveau vers xcode 5 et lorsque j'exécute mon application dans le simulateur iOS, l'écran de démarrage recouvre la barre d'état et lorsque vous êtes dans l'application, la barre d'état recouvre des éléments de mon application, comme un bouton de retour situé en haut à gauche. coin de la main de mon application. Je construis mon application en utilisant phonegap 2.9. Des idées comment je peux obtenir ceci pour rendre correctement.

écran de démarrage

UI

67voto

Romance Points 1011

Vous pouvez résoudre ce problème si vous utilisez des story-boards, comme dans cette question: iOS 7 - barre d'État recouvre la vue

Si vous n'êtes pas à l'aide de storyboard, puis vous pouvez utiliser ce code dans votre AppDelegate.m en did finishlaunching:

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);
}

Voir aussi cette question: barre d'État et la barre de navigation de problème dans IOS7

50voto

Gimi Points 421

Dans MainViewController.m à l' intérieur: - (void)viewWillAppear:(BOOL)animated ajoutez ceci:

 //Lower screen 20px on ios 7
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        CGRect viewBounds = [self.webView bounds];
        viewBounds.origin.y = 18;
        viewBounds.size.height = viewBounds.size.height - 18;
        self.webView.frame = viewBounds;
    }
 

la fonction end ressemblera à ceci:

 
- (void)viewWillAppear:(BOOL)animated
{
    // View defaults to full size.  If you want to customize the view's size, or its subviews (e.g. webView),
    // you can do so here.
    //Lower screen 20px on ios 7
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        CGRect viewBounds = [self.webView bounds];
        viewBounds.origin.y = 18;
        viewBounds.size.height = viewBounds.size.height - 18;
        self.webView.frame = viewBounds;
    }
    [super viewWillAppear:animated];
}
 

36voto

Ce que je fais habituellement, c’est d’ajouter deux propriétés clé-valeur au fichier Info.plist .

entrez la description de l'image ici

Le code source des propriétés est:

entrez la description de l'image ici

9voto

Zane Points 71

J'ai un problème pour ouvrir le navigateur inApp avec phonegap. La solution de Gimi fonctionnait bien, mais à chaque fois que j'ouvrais le navigateur inApp, l'écran était rétréci en bas. J'ai donc ajouté une instruction if pour vérifier si l'origine de la vue Web était 0. Le navigateur inApp n'a plus l'origine y, ce qui a résolu mon problème.

 // ios 7 status bar fix
- (void)viewWillAppear:(BOOL)animated
{
    // View defaults to full size.  If you want to customize the view's size, or its subviews (e.g. webView),
    // you can do so here.
    //Lower screen 20px on ios 7
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        if(self.webView.frame.origin.y == 0) {
            CGRect viewBounds = [self.webView bounds];
            viewBounds.origin.y = 20;
            viewBounds.size.height = viewBounds.size.height - 20;
            self.webView.frame = viewBounds;
        }
    }

    [super viewWillAppear:animated];
}
 

La solution n'est pas vraiment la mienne mais je ne trouve pas la source. J'espère que ça aide!

6voto

Moeez Akram Points 149

Placez cet extrait de code dans votre fichier MainViewController.m dans le projet phonegap.

 - (void)viewDidLayoutSubviews{

    if ([self respondsToSelector:@selector(topLayoutGuide)]) // iOS 7 or above
    {
        CGFloat top = self.topLayoutGuide.length;
        if(self.webView.frame.origin.y == 0){
            // We only want to do this once, or 
            // if the view has somehow been "restored" by other    code.
            self.webView.frame = CGRectMake(self.webView.frame.origin.x,
                                           self.webView.frame.origin.y + top,
                                           self.webView.frame.size.width,
                                           self.webView.frame.size.height-top);
        } 
    } 
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X