Mise en page automatique: ajouter une contrainte à superview et non à Top Layout Guide?


112

J'ai un UIView dans mon UIViewController dans le storyboard sur lequel je souhaite ajouter une contrainte à l'espace qui affiche une distance du bord supérieur.

Maintenant, lorsque je fais l'habituel en ctrl + glisser vers la vue principale du ViewController, je n'ai que l'option de le définir sur le guide de mise en page supérieur.

C'est un problème pour moi car à un moment donné dans l'application, je vais déplacer la vue principale d'environ 20 à 50 pixels et ce qui se passe alors, c'est que la vue que j'ai ne bougera pas ... parce qu'elle n'est pas alignée pour superview.

Comment puis-je le faire manuellement dans le storyboard ou dois-je l'ajouter par programme?

J'utilise xcode 6.


Pouvez-vous faire glisser et déposer vers la bonne entité dans le plan du document vers la gauche? - Objets de scène dans cette capture d'écran: ptgmedia.pearsoncmg.com/images/chap5_9780672335761/elementLinks/…
Woodstock

J'ai essayé cela aussi, même résultat
Arbitur

Réponses:


306

Il y a une flèche à droite de la valeur de la constante de contrainte. Si vous cliquez dessus, un menu apparaît dans lequel vous pouvez choisir à quoi vous voulez rendre votre contrainte relative. Si vous choisissez «Afficher», il l'épinglera en haut de la vue.

entrez la description de l'image ici


6
Alléluia! Je ne savais pas ce que j'allais faire lorsqu'ils ont supprimé le menu Editeur -> Épingler.
Jeremy Hicks

4
Je ne peux pas croire que je n'ai pas vu ça avant. Impressionnant.
zumzum

9
Juste une note pour les personnes aussi ignorantes que moi -> vous ne pourrez peut-être pas effectuer ce changement à moins que la vue à laquelle vous ajoutez la contrainte ne se trouve sous le guide de mise en page supérieur. J'avais une vue au-dessus du guide de mise en page supérieur et le "Guide de mise en page supérieur" n'était pas une option dans le menu déroulant. Ce qui est probablement une déclaration "duh" pour les non-newbs comme moi :)
Ryan James

2
Il s'agit de ces petites subtilités Xcode. Cela fait tellement. :)
Marchy

Juste une petite précision qui m'a dérouté: malgré l'image ayant le Guide de mise en page supérieur coché, si vous voulez épingler la vue en HAUT de la vue comme tout en haut de l'appareil, sélectionnez "Afficher".
micnguyen

57

Vous devriez pouvoir le faire en mettant en évidence la vue souhaitée dans le storyboard, puis en sélectionnant Editor > Pin > Top Space to Superviewdans le menu supérieur.


Ceci est obsolète dans XCode 7, voir la réponse de @ PaulGurov à la place.


Fonctionne comme un charme - XCode 6.3
NKorotkov

4
Ils ont supprimé «pin» du menu de l'éditeur dans Xcode 7. De nouvelles solutions?
Kyle G

14

TL; DR: vous pouvez contraindre à la marge en appuyant sur la Alttouche du clavier.


On peut également ajouter que si la vue que vous essayez d'épingler n'est pas une sous-vue directe de la vue à laquelle vous voulez l'épingler, l'approche suggérée n'est pas vraiment valable. Supposons que la hiérarchie de vues ressemble à cela et que vous souhaitiez épingler la vue d'image ( Parallax Image Viewdans ce cas) à la vue du contrôleur de vue ( Viewdans ce cas).

entrez la description de l'image ici

Pour ce faire, il vous suffit de Control+ Dragdu Parallax Image Viewau View. Cela présente les choix par défaut où vous pouvez voir Vertical Spacing to Top Layout Guidepour épingler le Parallax Image Viewguide de mise en page supérieur.

entrez la description de l'image ici

Ce que vous voulez, c'est l'épingler en haut (marge) de la vue. Pour ce faire, vous devez passer à l'autre ensemble de contraintes en appuyant surAlt

entrez la description de l'image ici


Astuce très utile. Cela a en fait résolu mon problème.
Machado le

Cela fonctionne pour moi, mais je ne sais pas comment ajouter plusieurs contraintes en même temps. Maintenant, je dois ajouter un par un, pour prendre le temps.
Duc Nguyen le

3

J'avais déjà tout un tas de contraintes et je voulais juste les changer plutôt que les casser. Il s'avère que si vous double-cliquez sur la contrainte à modifier, puis cliquez sur l'élément qui a le ".Margin", vous pouvez simplement désactiver le "Par rapport à la marge" en sélectionnant cet élément.

Sélectionnez le relatif à la marge


C'était ce que je cherchais quand je suis venu ici! Merci
netigger

1

La réponse de Dan fonctionne. Je voulais juste dire que si vous définissez votre vue dans storyBoard à y <20, et configurez des contraintes via le panneau de broches, il sera mis en avant pour superview:

entrez la description de l'image ici

entrez la description de l'image ici


0

Si la hauteur de la vue est définie sur 0 par accident, le guide de disposition de l'espace vertical vers le haut n'apparaîtra PAS. Le guide de disposition de l'espace vertical vers le bas apparaîtra, cependant, ce qui doit avoir du sens pour quelqu'un à l'intérieur d'Apple vers 2004.


0

Aucune des réponses ci-dessus n'a fonctionné pour moi, à la place, je dois faire un hack pour définir le haut de ma sous-vue avec le haut de superview à la place avec le guide de mise en page Top.

  • Tout d'abord, définissez le centre de la sous-vue verticalement avec Superview.
  • Ensuite, modifiez les contraintes Centre Y pour la sous-vue et la vue supervisée en contrainte Top .

Vous êtes prêt à partir maintenant.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.