web-dev-qa-db-fra.com

Container View est poussé vers le bas comme s'il avait un UINavigationBar?

J'ai un UIViewController avec une vue de conteneur. Cette vue de conteneur contient un UITableViewController.

UIViewController est intégré dans un UINavigationController. Je configure la barre de navigation en modifiant la couleur de la teinte, la couleur de la teinte de la barre et les attributs du texte du titre, mais lorsque j'essaie de modifier la translucidité, j'ai un problème. J'ai identifié le problème en supprimant tous les autres codes de personnalisation. Chaque fois que je fais cela dans UIViewController -viewDidLoad:

self.navigationController.navigationBar.translucent = NO;

la vue Conteneur ajoute un peu d'espace sur elle-même, comme si elle avait sa propre barre de navigation. Chaque fois que je définis translucide sur OUI, la vue affiche tout correctement. Cela se produit uniquement sur une vue contenue chaque fois que je définis translucide sur NON.

Y a-t-il quelque chose qui me manque ici?

J'ai essayé de définir la translucidité sur YES sur la vue contenue et de la définir sur caché, mais rien n'a fonctionné. D'une manière ou d'une autre, la vue contenue hérite-t-elle des propriétés du conteneur du parent? Comment éviter cet espace supplémentaire créé sur la vue contenue chaque fois que je définis la translucidité sur NO?

Je m'attendrais à ce que le réglage de la translucidité n'affecte que la translucidité, mais pas la position des vues.

Lorsque translucide = OUI

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|    UITableViewController        |
|    in a Contained View          |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
+---------------------------------+

quand translucide = NON

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|blank space created on top of view
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|     UITableViewController       |
|     in a Contained View         |
|                                 |
+---------------------------------+

P.S. Ma vue est plus complexe que cela, je suis simplement en train de voler.

45
Eric

Ce qui vous manque ici, c'est qu'une barre de navigation translucide se trouve au-dessus de la vue de votre contrôleur de vue, tandis qu'une barre de navigation non translucide pousse la vue de votre contrôleur de vue (en la redimensionnant efficacement).

Donc, ce qui se passe ici, c'est qu'avec une barre de navigation translucide, cet espace blanc est en fait caché sous la barre, tandis que lorsque la barre n'est pas translucide, elle est "poussée vers le bas".

Il existe plusieurs façons de procéder et cela dépend principalement de l'utilisation ou non de la mise en page automatique.

34
micantox

J'ai résolu ce problème en ajoutant cette ligne de code dans -viewDidLoad:

self.extendedLayoutIncludesOpaqueBars = YES;
19
qianling

Si ce problème se produit avec un storyboard (sans toucher à la propriété translucide dans le code), j'ai trouvé utile de vérifier les paramètres de la barre de navigation et - si nécessaire - le fichier source du storyboard.

(Cela ne s'applique pas pleinement à cette question, mais lorsque j'ai recherché le problème, seule cette question est apparue et peut-être que les informations aident les autres avec le même problème.)


Les détails:

Pour accéder à la barre de navigation dans l'éditeur de storyboard: Afficher l'aperçu du document (menu Éditeur -> Afficher l'aperçu du document), sélectionnez la barre de navigation.

Navigation Bar in Document Outline

Ensuite, dans le volet Utilitaires sur le côté droit de l'inspecteur des attributs, assurez-vous que "Translucide" n'est pas coché.

Translucent Propterty

Si cela ne vous aide pas, ouvrez le fichier de storyboard dans TextEdit, recherchez l'élément navigationBar et recherchez les attributs opaque ou translucent. Tu veux translucent="NO".

StoryBoard Source

(Pour ouvrir la source du storyboard: Dans Xcode dans le navigateur de projet, faites un clic droit sur le fichier du storyboard. Sélectionnez "Afficher dans le Finder" et dans la fenêtre du Finder, faites un clic droit sur le fichier et sélectionnez "Ouvrir avec ..." et sélectionnez TextEdit.)

EDIT: (Je ne sais pas, s'il était là tout le temps, mais on peut faire un clic droit sur le fichier storyboard dans le navigateur de projet et sélectionner "Ouvrir en tant que" -> "Code source". Pas besoin d'aller dans le Finder .)

16
Rainer Schwarze

J'ai résolu ce problème en accédant à IB> Sélectionnez la vue> Désélectionnez "Ajuster les encarts de la barre de défilement"

3
Phil Hudson

Ce qui précède mentionné dans les réponses ci-dessus n'a pas fonctionné pour moi.Lorsque le translucide est [~ # ~] non [~ # ~] mon ViewController pousse vers le bas qui est intégré dans le contrôleur de navigation. La solution qui a fonctionné pour moi est indiquée ci-dessous

  1. Allez à Inspecteur d'attributs
  2. Sélectionnez "Étendre les bords" en cochant la case intitulée sous la barre opaque

La capture d'écran est jointe

enter image description here

J'utilise Xcode 9.

Merci

3
Vineeth Joseph

Depuis iOS 7.0, toutes les vues passent automatiquement derrière les barres de navigation, les barres d'outils et les barres d'onglets pour fournir ce que Apple appelle "contexte" - avoir une idée de ce qui se trouve sous l'interface utilisateur (quoique flouté avec un givré) effet de verre) donne aux utilisateurs une idée de ce qui est juste hors de l'écran.

Si cela vous gêne (et honnêtement, cela se produit souvent de manière surprenante), vous pouvez facilement le désactiver pour un contrôleur de vue donné en modifiant sa propriété edgeForExtendedLayout.

Par exemple, si vous ne voulez pas qu'un contrôleur de vue passe derrière les barreaux, utilisez ceci:

edgesForExtendedLayout = []

Disponible depuis iOS 7.0

Source

1
brahimm

C'est uniquement à cause de vos problèmes de mise en page automatique, peut-être que vous masquez certaines vues au début, affichez toutes les vues et vérifiez si l'espace est toujours là

0
SHINTO JOSEPH