Après la mise à jour vers Xcode 5, les barres de navigation de toutes les vues de mon application se sont déplacées vers le bas. Voici quelques captures d'écran, la première montrant tout dans la vue telle qu'elle est déroulée, et la seconde montrant tout cela intact. La barre de recherche doit commencer là où la barre de navigation.
Quelqu'un sait comment je peux résoudre ce problème?
edit: j'ai essayé cette recommandation précédemment:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
Mais cela donne des résultats très étranges.
Cela peut être dû au fait que j'ai un "menu de diapositives" sous ce contrôleur de vue qui apparaît en raison de la transparence de la barre de navigation.
Réponses:
Définissez la propriété translucide de la barre de navigation sur NON :
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
dans votre
viewDidLoad
méthode.la source
viewDidLoad
mais cela ne donne aucun changement.Par
iOS 7
défaut , la valeur de la propriété translucide du contrôleur est OUI, vous définissez donc la propriété translucide NON pour ce problème.la source
Vous pouvez désactiver le "Prolonger les bords" dans l'inspecteur d'attributs du contrôleur de vue de cet écran (comme indiqué dans l'image ci-dessous):
la source
Cela fonctionne également pour Swift sur iOS 8.1
la source
Si vous souhaitez conserver la translucidité sur votre
navigationBar
, à la fin de votreviewDidLoad
ou dans votreviewWillAppear
ajoutez cette ligne de code:D'une certaine façon , si votre
scrollView
sous - classe (UITableView
,UICollectionView
, etc.) est àindex
0 dans la vue actuellesubviews
, il ajuste automatiquement EISN en fonction de votrenavigationBar
. Et cela ne devrait pas non plus affecter votre interface utilisateur dans les versions antérieures à iOS7.EDIT Si vous initialisez votre
UITableView
programme par programmation, il est préférable de l'ajouter à la vue en utilisant ce[self.view insertSubview:self.tableView atIndex:0];
la source
[self.view insertSubview:self.tableView atIndex:0];
au lieu de l'envoyer à l'arrière après l'avoir ajouté.Swift 4 :
Définissez la ligne de code suivante dans la méthode viewDidLoad:
la source
Vous pouvez ajouter cette méthode dans votre contrôleur de vue comme indiqué sur cette URL :
la source
Une autre approche consiste à définir
self.automaticallyAdjustsScrollViewInsets = YES;
sur votre contrôleur de vue. C'est activé par défault. Mais dans votre cas:Je vois que vous utilisez EGORefreshHeaderView. Il joue avec contentInset de UITableView. Ainsi, lorsque vous le relâchez, l'en-tête réinitialisera l'encart supérieur au lieu de restaurer la valeur précédente.
la source
Si vous souhaitez avoir un contrôle complet sur les vues et éviter les ajustements erronés d'iOS, sous-classez UITableView et ajustez les inserts (défilement et indicateurs) dans - (void) willMoveToWindow: (UIWindow *) newWindow. Travaille pour moi.
la source
Une autre option consiste à ouvrir votre fichier Info.plist en mode code source et à saisir les informations suivantes:
J'espère que cela t'aides.
la source