Подтвердить что ты не робот

Скопировать объекты с дополнительными элементами, включая "ограничения", используя конструктор интерфейса - iOS

Как вы копируете представление или объект с дополнительными объектами с ограничениями на другое представление?

Всякий раз, когда я это делаю, объект назначения - это просто заторник и исправление - это боль.

4b9b3361

Ответ 1

У меня была такая же проблема некоторое время назад, дайте мне знать, если это поможет: Сохранять позицию при перемещении UIView в иерархии (вставить)

(скопировано здесь для справки):

Оригинальный ответ Джей: fooobar.com/questions/69169/...

В принципе, вы не можете копировать/вставлять напрямую, но вы можете выполнить несколько дополнительных шагов:

  • Выберите все виды, метки и т.д., вы хотите перейти к новому супер-представлению
  • Редактор → встроенный в просмотр
  • Переместите вновь созданный вид "контейнера" в представление, которое вы хотите вставить в исходное
  • Выберите представление "контейнер". Редактор → unembed. Все элементы будут сбрасываться в супер-вид, сохраняя макет.

Ответ 2

Он не всегда сохраняет ограничения на месте, но единственный способ, которым я нашел перемещение группы представлений и сохранить позицию, - это выбрать несколько, а затем перетащить представления с помощью мыши в новое место. Вы даже можете копировать представления в новый файл, копируя/вставляя объект верхнего уровня, который будет сохранять все позиционирование, а затем перетаскивая группу представлений мышью между объектами представления верхнего уровня.

Ответ 3

Мне пришлось скопировать довольно сложную настройку AutoLayout из одного места в другое, поэтому я искал способы избежать необходимости вручную создавать все ограничения.

То, что я закончил, - очень тщательно изменить файл интерфейса XML. Вот как:

!!! Without proper care, you might corrupt your interface file !!!
!!! Have a backup before attempting this !!!

Шаг 1:
Используя обычный интерфейс Builder, переместите все представления из старого в свой новый супервизор. Не беспокойтесь, если они все испортились (например, все сосредоточено в новом супервизии или много ошибок AutoLayout). Пока сохраняется иерархия их представлений, это прекрасно.

Шаг 2:
Узнайте идентификаторы объектов вашего старого и нового супервизора. Они показаны в разделе "Утилиты" (правая сторона) Identity Inspector > Document > Object ID. Идентификатор выглядит примерно как gGH-lW-Bke.

введите описание изображения здесь

Шаг 3:
Откройте файл интерфейса как XML (щелкните правой кнопкой мыши по storyboard/xib > Open As > Source Code).

введите описание изображения здесь

Теперь, очень тщательно, найдите и замените Object ID старого супервизора новым , если применимо. НЕ ДЕЛАЙТЕ "заменить все"! Вы должны менять его только в таких местах, как:
<constraint firstItem="gGH-lW-Bke" firstAttribute="top" secondItem="RXG-iN-Ra7" secondAttribute="top" id="u46-2d-oD0"/>

(Вам нужно заменить старый вид id, где он указан как firstItem или secondItem)

И даже в этом случае, возможно, в вашем случае есть некоторые ограничения, которые не следует изменять (например, ограничения, которые вообще не относятся к просмотрам, которые вы только что переместили, но связаны со старым супервидом)! Итак, внимательно проведите.

Если вам нужно быть более безопасным, и если ваша установка является слишком сложной, вы можете сначала (до шага 1) составить список идентификаторов объектов всех видов, которые вы собираетесь переместить, и которые участвуют в ограничения с (около-заброшенным) супервидом.

Шаг 4:
Откройте файл интерфейса как обычно (щелкните правой кнопкой мыши > Open As > Interface Builder). Убедитесь, что все выглядит хорошо, нет предупреждений или ошибок.

Готово.

Ответ 4

У меня просто была эта проблема, я просто скопировал родительское представление ко всем объектам, которые я хотел переместить, и он сохранил все ограничения! Это Xcode 10