다른 접근 방식을 발견했습니다. 기본적으로 : Move = Cut + Paste
이렇게하면 :
- 모든 하위보기를 새 상위보기 (P ')의 하위로 가져옵니다.
- Auto-Layout 기반 Storyboard에 (거의) 모든 제약 조건 유지
- 서브 뷰의 상대적 위치 (프레임)를 서로 유지
이렇게하면 다음을 수행 할 수 없습니다.
기본적으로 Storyboard에서 하나 (루트)를 제외한 각 뷰 에는 상위 뷰가 있습니다 . 다음으로 여러 하위보기를 복사 / 이동하면 프레임과 제약 조건 이 손실됩니다 .
대답은 아주 간단합니다. 상위 뷰 (P)를 새 상위 뷰 (P ')에 복사하여 하위 뷰 (SV)의 복사본을 만듭니다. 이렇게하면 이동하려는 모든 하위보기가 아닌 해당 상위 새보기 (P ')에서 새 상위보기로 제약 조건 만 다시 만들어야 할 수 있습니다.
상위 뷰 (P)를 새 뷰 (P ')로 복사 한 후 새 뷰 (P')에서 다음을 수행합니다.
- 옮기고 싶은 아이들을 제외한 모든 아이들을 제거하십시오
- 새 부모 (P ') 제약을 다시 생성합니다.
- 가능한 Interface Builder 아웃렛을 (SVs ')에 다시 생성
원래 부모보기 (P)에서 다음을 수행합니다.
전에:
보기 1
보기 2
피
이동하고 싶은 SV
이동하고 싶지 않은 SV
보기 3
후:
보기 1
보기 2
피
이동하고 싶지 않은 SV
보기 3
피'
이동하고 싶은 SV
예를 들어 UIScrollView를 부모 뷰로 사용하는 경우 이것이 잘 일반화되지 않는다는 점을 강조해야합니다. 그런 다음 복사본은 바람직하지 않은 UIScrollView가 될 것입니다.
또 다른 한 가지는 원래 상위 뷰 (P)에서 일부 하위 뷰 (SV)를 제거 할 때 다른 (이동 불가능한 하위 뷰)가 참조하는 경우 일부 제약 조건을 다시 만들어야 할 수 있다는 것입니다. 하지만 어쨌든 그렇게해야합니다.