Xcode. Есть ли способ перетащить компонент из одного представления в другое без потери его рамки?

То, что я хотел бы сделать, это перетащить компонент/представление из одного супервизора в другой в Xcode interface-builder без сброса его кадра/положения.

Поведение Xcode по умолчанию при выполнении этого похоже на то, чтобы центрировать представление, перемещаемое вертикально и горизонтально в новом супервизоре при сохранении его размеров. Это крайне расстраивает, так как это означает, что представление необходимо вручную переместить в новый супервизор. Но я правильно позиционировал его, прежде чем переместить его, поэтому Xcode хотел бы просто запомнить все атрибуты его фрейма, а не только его ширину/высоту. Это возможно?

Ответ 1

Другое решение:

  • Выберите элементы, которые вы хотите в своем подвью, затем
  • (на панели инструментов) Редактор → Вставить In → тип просмотра для вставки.

Ответ 2

Я нашел кое-что, что могло бы помочь вам, ребята!

Задача состоит в том, чтобы перегруппировать "дочерние представления" в "родительский вид", чтобы они становились дочерними элементами родительского представления иерархически и сохраняли отображаемые физические позиции как прежде.

Сначала настройте родительское представление, чтобы физически покрыть область дочерних представлений. Во-вторых, убедитесь, что все дети ревут в списке просмотра.

Теперь выберите всех детей с помощью мыши и переместите их, например. один пиксель вверх и один пиксель вниз (просто для того чтобы сказать IB есть некоторое изменение). После этого выпустят детей, и они волшебным образом станут детьми родителя и будут показывать свои позиции.

Он работает для меня на OSX 10.8.2 и Xcode 4.6.

Удачи!

Ответ 3

Мне удалось сэкономить много времени на перепозиционирование и сделать следующее:

  • Добавить родительский вид в Interface Builder на том же уровне, что и потенциальные подпрограммы.
  • Откройте раскадровку в текстовом редакторе и скопируйте потенциальные объекты в теги subviews родительского представления. XCode будет обновляться после его сохранения.

Не очень элегантный, хотя не вижу, почему XCode не поддерживает его с помощью Shift или что-то в этом роде.

Ответ 4

  • Выберите все элементы управления, которые вы хотите переместить из одного UIView в другой UiView (например, быть дочерним) или ScrollView

  • Вырезать/Копировать

  • Теперь, перетащив новый UIView/ScrollView в существующий UIView, не нажимайте один раз, чтобы выбрать его, вместо DOUBLE нажмите новый UIView/ScrollView и вставьте все элементы управления.

  • Дистанционное расстояние останется таким же среди всех элементов управления, но вам, возможно, придется снова установить элементы управления. Поэтому не нажимайте нигде, пока вы не переместили их, просто переместите все элементы управления стрелками навигации, поскольку все они уже выбраны, или вы можете снова выбрать их.

ПРИМЕЧАНИЕ: я m на XCode 4.2

Ответ 5

Я сделал что-то похожее на решение Степана, не используя раскадровку. В IB, когда вид ViewController открыт:

  • Создайте еще один вид в дополнение к главному виду VC
  • Переместите все подзоны во второе представление, перетащив их из одного вида в другое (перетаскивание из списка с левой стороны сбрасывает их положение). Если вы не можете выбрать их из IB с помощью мыши, выберите все из списка на слева, затем выберите один окончательный подъярус с панели IB с помощью кнопки "cmd".
  • Верните их в окончательное представление на начальном главном экране.
  • Удалить добавленный вид, все установлено.

Ответ 6

Это лучшее решение для копирования подзонов в другое представление и сохранения позиций:

  • Выберите элементы, которые вы хотите в своем подвью, затем
  • Редактор → Вставить In → View
  • Скопировать этот вид (Cmd + C)
  • Отменить (Cmd + Z) (так как вам просто нужны подзоны)
  • Перейдите к представлению, в которое вы хотите подключить subviews (Cmd + V)
  • Выберите вид вложения, который вы скопировали и Редактор → Unembed

Шаг 6 удалит представление вложения, и вы скопировали только субвью.

Ответ 7

Я обнаружил другой подход. Это в основном: Move = Cut + Paste

Таким образом:

  • получить все ваши дочерние объекты как дочерние элементы нового родительского представления (P ')
  • сохранить (почти) все ваши ограничения в раскадровке на основе автоматического макета
  • сохраняйте свои относительные позиции (кадры) вашего представления в объектах

Таким образом, вы не можете:

  • редактировать файл раскадровки в текстовом редакторе

Основой является то, что каждый вид, кроме одного (root) в Storyboard , имеет родительский вид. Затем, когда вы копируете/перемещаете несколько подзонов, вы теряете кадры и ограничения.

Ответ довольно прост. Вы делаете копию своих подсмотров (SV), копируя их родительское представление (P) в новое родительское представление (P '). Таким образом, вам может понадобиться воссоздать только ограничения из этого родительского нового представления (P ') в его новое родительское представление, но не для каждого подсмотра, который вы хотите переместить.

После того, как вы сделали копию родительского представления (P) в новую (P '), из этого нового представления (P') вы:

  • удалите все дети, кроме тех, которые вы хотите переместить.
  • создать новые родительские (P ') ограничения
  • воссоздать возможные выходы интерфейса Builder для (SVs)

И из исходного родительского вида (P) вы:

  • удалите всех детей, которые вы хотите переместить.

До:

View1

View2

Р

     
  

SVs-вы-хотите передвигающийся

         

SVs-вы-делать-не-хочу передвигающийся

  

View3

После того, как:

View1

View2

Р

     
  

SVs-вы-делать-не-хочу передвигающийся

  

View3

Р '

     
  

SVs'-вы-хотите передвигающийся

  

Я должен подчеркнуть, что это не очень хорошо обобщается, если у вас есть, например, UIScrollView как родительское представление. Тогда его копией будет снова UIScrollView, что может быть нежелательно.

Другое дело, когда вы удаляете некоторые из подсмотров (SVs) в исходном родительском представлении (P), вам может потребоваться воссоздать некоторые ограничения, если ссылаются на другие (не движущиеся подзаголовки). Но вы все равно должны это делать.

Ответ 8

Xcode Interface Builder запутывает, когда Parent View перетаскивается и переносится в другой вид (UIView, ScrollView, StackView)

Q:
Внедрение представления (которое содержит много других подпрограмм внутри него) в ScrollView или в другом представлении верхнего уровня не является прямым с тем, что я видел до сих пор. Что произойдет вскоре после того, как все подзаголовки могут показаться неуместными из-за того, что они не могут найти их исходный кадр.

A:
Выполните следующие шаги, и вы сможете решить эту задачу как можно проще:

  1. Выберите элементы, которые вы хотите в своем подвью, затем
  2. Перейти в меню, Редактор → Вставить - - Просмотреть
  3. Скопируйте этот новый вид (Cmd + C) с subviews (для меня в настоящее время все ограничения были сохранены до сих пор на этом этапе)
  4. Перейдите к представлению (будь то ScrollView или может быть StackView) вы хотите, чтобы вложенные объекты находились и вставляли (Cmd + V) скопированный вид
  5. Выберите вложенный вид вложения (который вы недавно создали ранее) и перейдите в меню Xcode, Editor → Unembed

Нет, еще не закончил! Иногда вы можете столкнуться с тем, что существует несколько проблем, связанных с ограничениями пользовательского интерфейса, и вам придется их соответствующим образом разрешать.