web-dev-qa-db-fra.com

Autolayout: Ajouter une contrainte à superview et non au Top Layout Guide?

J'ai un UIView dans mon UIViewController dans le storyboard auquel je souhaite ajouter une contrainte pour espacer cette vue à une distance du bord supérieur.

Maintenant, quand je fais la normale en ctrl + glissant dans la vue principale du ViewController, je ne dispose que de l'option pour le définir comme guide de disposition supérieur.

C'est un problème pour moi car à un moment de l'application, je vais déplacer la vue principale de 20 à 50 pixels et ce qui se passe ensuite est que cette vue ne bouge pas ... car elle ne correspond pas à Superview.

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

Je suis en utilisant xcode 6.

103
Arbitur

Il y a une flèche à droite de la valeur de la constante de contrainte. Si vous cliquez dessus, un menu apparaît vous permettant de choisir le type de contrainte que vous souhaitez utiliser. Si vous choisissez "Affichage", il sera épinglé en haut de la vue.

enter image description here

299
Pavel Gurov

Vous devriez pouvoir le faire en mettant en surbrillance la vue souhaitée dans le storyboard, puis en sélectionnant Editor > Pin > Top Space to Superview dans le menu du haut.


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

57
dan

TL; DR: Vous pouvez limiter la marge en appuyant sur la touche Alt touche 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 souhaitez l'épingler, l'approche suggérée n'est pas vraiment valable. Supposons que la hiérarchie des vues ressemble à cela et que vous souhaitez épingler la vue d'image (Parallax Image View dans ce cas) à la vue du contrôleur de vue (View dans ce cas).

enter image description here

Pour faire cela vous venez Control + Drag du Parallax Image View au View. Cela présente les choix par défaut où vous pouvez voir Vertical Spacing to Top Layout Guide pour épingler le Parallax Image View au guide de disposition supérieur.

enter image description here

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 sur Alt

enter image description here

12
Zhivko Bogdanov

J'y avais déjà plein de contraintes et je voulais juste les changer plutôt que de 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 "Relative à la marge" en sélectionnant cet élément.

 Select the relative to margin

2
christophercotton

La réponse de Dan fonctionne. Je voulais simplement dire que si vous définissez votre vue dans storyBoard à y <20 et que vous configurez des contraintes via le panneau des épingles, cela placera top en tête:

enter image description here

enter image description here

1
oren

Aucune des réponses ci-dessus n'a fonctionné pour moi, mais je dois faire un bidouillage pour définir le haut de ma sous-vue avec celui de Superview plutôt qu'avec le guide de disposition Top.

  • Commencez par définir le centre de la sous-vue verticalement avec superview.
  • Ensuite, modifiez les contraintes Centre Y pour la sous-vue ainsi que superview en Top contrainte.

Vous êtes prêt à partir maintenant.

0
Jas_meet

Si la hauteur de la vue est définie sur 0 par accident, le guide de mise en espace verticale en haut ne s'affiche PAS. Un guide de mise en page verticale vers le bas apparaîtra, ce qui doit avoir du sens pour quelqu'un dans Apple vers 2004.

0
Gabriel Jensen