Я обнаружил другой подход. Это в основном: Переместить = Вырезать + Вставить
Таким образом вы делаете:
- сделать все ваши подпредставления дочерними по отношению к новому родительскому представлению (P ')
- сохраните (почти) все ваши ограничения в раскадровке на основе Auto-Layout
- сохраняйте относительные позиции (фреймы) вашего subview друг к другу
Таким образом вы не:
- редактировать файл раскадровки в текстовом редакторе
Дело в том, что каждое представление, кроме одного (корневого) в Storyboard, имеет свое родительское представление . Затем, когда вы копируете / перемещаете несколько подпредставлений, вы теряете рамки и ограничения .
Ответ довольно прост. Вы делаете копию своих подвидов (SV), копируя их родительское представление (P) в новое родительское представление (P '). Таким образом, вам может потребоваться воссоздать только ограничения из этого родительского нового представления (P ') в его новое родительское представление, но не для каждого подпредставления, которое вы хотите переместить.
После того, как вы сделали копию родительского представления (P) в новый (P '), из этого нового представления (P') вы:
- удалите всех детей, кроме тех, которых вы хотели переместить
- воссоздать новые родительские (P ') ограничения
- воссоздать возможные выходы Interface Builder для (SV)
И из исходного родительского представления (P) вы:
- удалите всех детей, которых вы хотели переместить
Перед:
View1
View2
п
SV-вы-хотите-переехать
SV-вы-не-хотите-переезжать
View3
После:
View1
View2
п
SV-вы-не-хотите-переезжать
View3
П'
SV-вы-хотите-переехать
Я должен подчеркнуть, что это не очень хорошо обобщает, если у вас, например, UIScrollView в качестве родительского представления. Тогда его копия будет снова UIScrollView, что может быть нежелательно.
Другое дело, когда вы удаляете некоторые из подпредставлений (SV) в исходном родительском представлении (P), вам может понадобиться воссоздать некоторые ограничения, если на них ссылаются другие (неподвижные подпредставления). Но вы все равно должны это сделать.