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.
Réponses
Trop de publicités?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
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];
}
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!
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);
}
}
}