Wykryłem inne podejście. Zasadniczo jest to: Przesuń = Wytnij + Wklej
W ten sposób możesz:
- ustaw wszystkie podglądy podrzędne jako elementy podrzędne nowego widoku rodzica (P ')
- zachowaj (prawie) wszystkie swoje ograniczenia w Storyboard opartym na Auto-Layout
- zachowaj względne pozycje (ramki) subview jeden względem drugiego
W ten sposób nie:
- edytuj plik Storyboard w edytorze tekstu
Podstawą jest to, że każdy widok z wyjątkiem jednego (głównego) w Storyboard ma swój widok nadrzędny . Następnie, kiedy kopiujesz / przenosisz wiele podglądów podrzędnych, tracisz klatki i ograniczenia .
Odpowiedź jest dość prosta. Tworzysz kopię swoich podglądów podrzędnych (SV), kopiując ich widok nadrzędny (P) do nowego widoku nadrzędnego (P '). W ten sposób może być konieczne ponowne utworzenie tylko ograniczeń z tego nowego widoku nadrzędnego (P ') do jego nowego widoku nadrzędnego, ale nie dla każdego widoku podrzędnego, który chcesz przenieść.
Po skopiowaniu widoku rodzica (P) do nowego (P '), z tego nowego widoku (P'):
- usuń wszystkie dzieci z wyjątkiem tych, które chciałeś przenieść
- odtwórz nowe ograniczenia nadrzędne (P ')
- odtworzyć możliwe gniazda Interface Builder do (SV)
A z oryginalnego widoku rodzica (P):
- usuń wszystkie dzieci, które chciałeś przenieść
Przed:
Widok 1
Widok 2
P.
SVs-chcesz-przenieść
SV-nie-chcesz-się-ruszać
Widok 3
Po:
Widok 1
Widok 2
P.
SV-nie-chcesz-się-ruszać
Widok 3
P '
SV-chcesz-przenieść
Powinienem podkreślić, że nie uogólnia to dobrze, jeśli masz np. UIScrollView jako widok nadrzędny. Wtedy jego kopia byłaby ponownie UIScrollView, co może nie być pożądane.
Inną rzeczą jest to, że kiedy usuwasz niektóre z podglądów podrzędnych (SV) w oryginalnym widoku nadrzędnym (P), może być konieczne ponowne utworzenie niektórych ograniczeń, jeśli inne (nieruchome podglądy) odnoszą się do nich. Ale i tak powinieneś to zrobić.