100 votes

Comment empêcher la barre de navigation de couvrir le haut de la vue dans iOS 7?

Après la mise à jour de Xcode 5, les barres de navigation dans toutes mes appli avec les points de vue ont décalé vers le bas. Voici quelques captures d'écran, la première montre tout dans la vue comme il est tiré vers le bas, et la seconde montre tous les inchangées. La barre de recherche doit commencer là où la barre de navigation.

All ContentAll Content on Idle

Quelqu'un sait comment je peux résoudre ce problème?

edit: j'ai essayé cette recommandation:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

Mais il donne de très des résultats bizarres.

Solution Attempt

Cela peut être parce que j'ai un "slide menu" sous ce point de vue contrôleur qui apparaît en raison de la transparence de la barre de navigation.

238voto

Deepesh Points 4732

Définissez la propriété translucide de la barre de navigation sur NO :

 self.navigationController.navigationBar.translucent = NO;
 

Cela empêchera la vue d'être encadrée sous la barre de navigation et la barre d'état.

Si vous devez afficher et masquer la barre de navigation, utilisez

  if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific
 

dans votre méthode viewDidLoad .

33voto

Sumit Mundra Points 2285

Dans iOS 7 par défaut, toute la valeur de la propriété translucide du contrôleur est OUI, vous devez donc définir la propriété translucide NON pour ce problème.

 self.navController.navigationBar.translucent = NO;
 

8voto

jbouaziz Points 803

Si vous voulez garder la translucidité sur votre navigationBar, à la fin de votre viewDidLoad ou dans votre viewWillAppear ajouter cette ligne de code:

[self.view sendSubviewToBack:self.tableView]

En quelque sorte, si votre scrollView sous-classe (UITableView, UICollectionView, etc.) est à l' index 0 dans votre vue actuelle subviews, il va automatiquement ajuster les encarts selon votre navigationBar. Et il ne devrait pas affecter votre INTERFACE utilisateur dans les versions antérieures à iOS7.


MODIFIER Si vous initialisez votre UITableView de la programmation, alors il est préférable de l'ajouter à la vue à l'aide de cette [self.view insertSubview:self.tableView atIndex:0];

3voto

malkoty Points 62

Vous pouvez ajouter cette méthode dans votre contrôleur de vue, comme indiqué sur cette URL :

 -(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}
 

2voto

Krivoblotsky Points 686

Une autre approche est de mettre `` sur votre contrôleur de vue. Cette option est activée par défaut. Mais dans votre cas :

Je vois que vous utilisez EGORefreshHeaderView. Il joue avec contentInset de UITableView. Donc quand vous relâcherez, en-tête réinitialisera encart supérieur au lieu de la valeur précédente de restauration.

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