Supposons que j'utilise Interface Builder pour créer une interface utilisateur dans Storyboard avec mise en page automatique. Puis-je copier ou déplacer certaines contraintes d'une vue à une autre?
Si vous utilisez le générateur d'interface, certaines contraintes seront automatiquement copiées si vous utilisez la cmd-c ou l'édition/la copie: celles qui incluent la hiérarchie de la vue de copie. Sinon, non, vous ne pouvez pas. Copiez la vue entière si vous souhaitez conserver les contraintes.
Voici mon hack pour obtenir TOUTES les contraintes à copier: j'ai une petite vue dans ma vue principale que je veux copier sur un autre contrôleur de vue, pour ce faire je copie sur toute la vue principale dans la nouvelle vue principale des contrôleurs de vue . Je fais ensuite glisser ma petite vue (sur la hiérarchie latérale) dans la vue principale de mon nouveau contrôleur, puis je viens de supprimer l'ancienne vue principale dont je n'ai pas besoin. De cette façon, vous conservez toutes les contraintes pour les éléments dans la petite vue.
J'espère que cela t'aides :)
Vous pouvez si vous comprenez et apprenez comment le XML du .xib
fichiers fonctionne. Je me suis habitué à eux et j'ai donc pu déplacer une vue avec ses contraintes dans une autre vue.
Je vais essayer de l'expliquer étape par étape:
myView
.xib
fichier> Open As
> Source Code
ou l'ouvrir dans un autre éditeur (par exemple Sublime Text
)Recherchez myView
et vous trouverez quelque chose comme:
<outlet property="myView" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
et copiez la valeur de l'attribut destination
Recherchez l'ID copié (i5M-Pr-FkT
) et l'un des résultats sera une balise view
:
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
Coupez et collez toute cette balise view
dans la balise subviews
de la vue requise:
<view contentMode="scaleToFill" id="Ovp-8Y-qHZ"> <!-- 2 -->
<subviews>
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
</subviews>
</view>
Continuez à rechercher l'ID copié et vous trouverez des contraintes telles que:
<constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/>
Vous devez déplacer ceci dans la balise constraints
de l'ancêtre commun le plus bas des deux superviews (l'ancienne et la nouvelle):
<view contentMode="scaleToFill" id="rK2-sE-P0d"> <!-- 3 -->
<subviews>
<view contentMode="scaleToFill" id="Ovp-8Y-qHZ"> <!-- 2 -->
<subviews>
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
</subviews>
</view>
</subviews>
<constraints>
<constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/>
</constraints>
</view>