Xcode - Est-il possible de faire glisser un composant à partir d'une vue à l'autre sans perdre son image?

ce que j'aimerais faire, c'est faire glisser un composant/vue d'un superview à un autre dans l'Interface-builder de Xcode sans que son cadre/position soit réinitialisé.

Le comportement par défaut de

Xcode lors de cette opération semble être de centrer la vue étant déplacée verticalement et horizontalement dans sa nouvelle superview, tout en préservant ses dimensions. C'est extrêmement frustrant, car cela signifie que la vue doit être manuellement repositionné dans son nouveau superview. Mais je l'avais placé correctement avant que je l'ai déplacé, donc J'aimerais que Xcode se souvienne juste de tous les attributs de son cadre au lieu de juste sa largeur/hauteur. Est-ce possible?

83
demandé sur shim 2012-07-16 16:18:36

7 réponses

une autre solution:

  1. sélectionnez les éléments que vous voulez dans votre sous-vue, puis
  2. (dans la barre d'outil) de l'Éditeur -> Incorporer Dans -> type d'affichage à incorporer dans.
210
répondu Jay 2013-06-06 02:40:34

j'ai trouvé quelque chose qui pourrait vous aider les gars!

la tâche consiste à regrouper les" points de vue des enfants "en" point de vue des parents " de façon à ce qu'ils deviennent des enfants de point de vue des parents de façon hiérarchique et qu'ils conservent les positions physiques affichées comme avant l'action.

d'abord, ajuster le point de vue des parents pour couvrir physiquement la zone des points de vue des enfants. Deuxièmement, assurez-vous que tous les enfants sont soufflet dans la vue liste.

sélectionnez maintenant tous les enfants avec la souris et déplacer par exemple, un pixel en haut et un pixel en bas (pour dire QU'il y a un changement). Après cela relâchez les enfants et ils deviendront magiquement les enfants du parent et garderont leurs positions sur l'affichage.

ça marche pour moi sur OSX 10.8.2 et Xcode 4.6.

bonne chance!

28
répondu vedrano 2016-10-04 15:26:38

j'ai réussi à économiser beaucoup de temps passé repositionnement des trucs et fait:

  1. ajouter la vue mère dans Interface Builder au même niveau que les futures versions.
  2. ouvrez le storyboard dans un éditeur de texte et copiez les sous-vues à l'intérieur des balises des sous-vues de la vue mère. XCode va se mettre à jour une fois que vous l'aurez sauvegardé.

pas très élégant cependant, je ne vois pas pourquoi XCode ne le supporte pas avec Shift ou quelque chose comme ça.

22
répondu Stepan Hruda 2012-10-15 13:41:26
  1. sélectionnez tous les contrôles que vous voulez déplacer D'un uivi à un autre uivi(peut-être enfant) ou ScrollView

  2. Coupe / Copie

  3. maintenant, après avoir fait glisser new UIView/ScrollView vers votre UIView existant, ne cliquez pas une seule fois pour le sélectionner, au lieu de double-cliquer sur le nouveau UIView/ScrollView et coller tous les contrôles.

  4. écart de Distance restera le même parmi tous les contrôles, mais vous devrez peut-être repositionner les contrôles à nouveau. Alors ne cliquez nulle part jusqu'à ce que vous ayez repositionné ceux-ci, repositionnez juste tous les contrôles par les flèches de navigation comme ceux-ci sont tous déjà sélectionnés, ou vous pouvez ve Pour les sélectionner à nouveau.

NOTE: Code x 4.2

10
répondu Sourangshu Biswas 2013-05-29 16:48:28

j'ai fait quelque chose de similaire à la solution de Stepan, sans utiliser un storyboard. Dans L'IB alors que la vue du ViewController est ouverte:

  1. créer une autre vue en plus de la vue principale de VC
  2. déplacez tous les sous-vues vers la deuxième vue en les faisant glisser d'une vue à l'autre (en faisant glisser la liste sur le côté gauche réinitialise leur position) si vous ne pouvez pas les sélectionner à partir de L'IB à l'aide de votre souris, puis sélectionnez tout de la liste sur le côté gauche sélectionnez ensuite un sous-vue final à partir du panneau IB en utilisant le bouton "cmd".
  3. ramenez-les à la vue finale sur la vue principale initiale.
  4. supprimer la vue ajoutée, tout est réglé.
4
répondu Yunus Nedim Mehel 2016-10-04 15:49:31

C'est la meilleure solution pour copier des sous-vues vers une autre vue et conserver les positions:

  1. sélectionnez les éléments que vous voulez dans votre sous-vue, puis
  2. De L'Éditeur -> Incorporer Dans -> Affichage
  3. copier cette vue (Cmd+C)
  4. annuler (Cmd+Z) (puisque vous vouliez juste les subviews)
  5. Aller à la vue que vous souhaitez que les sous-vues et de le coller(Cmd+V)
  6. sélectionner la Intégration voir que vous copiez-collé et Éditeur - > non assemblé

Étape 6 supprimerait la vue embedding et vous aurez copié juste les sous-vues.

1
répondu Dhruv Goel 2017-07-13 11:19:07

j'ai détecté une autre approche. Il est fondamentalement: Move = Coupe + Coller

de cette façon vous faites:

  • obtenir tous vos sous-vues pour être des enfants de la nouvelle vue parent (P')
  • conservez (presque) toutes vos contraintes dans le Storyboard Auto-Layout
  • gardez vos positions relatives de subview les unes par rapport aux autres

Ce comme vous ne le faites pas:

  • éditer le fichier Storyboard dans un éditeur de texte

Base la chose est que chaque vue sauf une (racine) dans le Storyboard a sa vue de parent . Ensuite, lorsque vous copiez/déplacez plusieurs fichiers, vous perdez les cadres et les contraintes .

la réponse est assez simple. Vous faites une copie de vos sous-vues (SVs) en copiant leur vue mère (P) dans la nouvelle vue de parent (p'). De cette façon, vous pouvez avoir besoin de recréer seulement les contraintes de cette nouvelle vue parent (P') à sa nouvelle vue parent, mais pas pour chaque sous-vue que vous vouliez déplacer.

après que vous ayez fait une copie de la vue mère (P) dans la nouvelle (P'), de cette nouvelle vue (P') vous:

  • retirez tous les enfants sauf ceux que vous vouliez déplacer
  • recréer une nouvelle parent (P') contraintes
  • recréer possible L'Interface du Générateur de points de vente (SVs')

Et à partir de l'original de vue parent (P):

  • retirez tous les enfants que vous vouliez déplacer

avant:

View1

Vue2

P

SVs-vous-veulent-se déplacer

SVs-vous-ne-pas-vouloir-à-déplacer

View3

après:

View1

Vue2

P

SVs-vous-ne-pas-vouloir-à-déplacer

View3

P'

SVs " -vous-voulez-à-déplacer

je dois souligner que cela ne généralise pas bien si vous avez par exemple UIScrollView comme vue de parent. Alors une copie de celui-ci serait à nouveau un UIScrollView ce qui peut ne pas être souhaitable.

une autre chose est quand vous retirez certains des subviews (SVs) dans vue parent (P) originale, vous pouvez avoir besoin de recréer certaines contraintes si d'autres (sous-vues Non mobiles) s'y réfèrent. Mais tu devrais le faire de toute façon.

0
répondu vedrano 2016-10-11 09:06:22