web-dev-qa-db-fra.com

Est-il possible de copier des contraintes d'une vue à une autre?

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?

30
kelin

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.

15
catanore

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 :)

15
Trianna Brannon

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:

  1. Créez-en une sortie: myView
  2. Cliquez avec le bouton droit sur le .xib fichier> Open As> Source Code ou l'ouvrir dans un autre éditeur (par exemple Sublime Text)
  3. 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

  4. 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>
    
  5. 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>
    
  6. 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"/>
    
  7. 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>
    
11
Iulian Onofrei