別のアプローチを検出しました。それは基本的に: 移動 = 切り取り + 貼り付け
このようにします:
- すべてのサブビューを新しい親ビューの子にする (P')
- 自動レイアウトベースのストーリーボードで(ほぼ)すべての制約を保持します
- サブビューの相対的な位置 (フレーム) を互いに維持する
この方法では、次のことはできません。
- ストーリーボード ファイルをテキスト エディターで編集する
基本は、ストーリーボードの 1 つ (ルート) を除く各ビューには親ビューがあるということです。次に、複数のサブビューをコピー/移動すると、フレームと制約が失われます。
答えはとても簡単です。親ビュー (P) を新しい親ビュー (P') にコピーして、サブビュー (SV) のコピーを作成します。このようにして、移動したいすべてのサブビューではなく、その親の新しいビュー (P') からその新しい親ビューへの制約のみを再作成する必要がある場合があります。
親ビュー (P) を新しいビュー (P') にコピーした後、その新しいビュー (P') から:
- 移動したい子を除くすべての子を削除します
- 新しい親 (P') 拘束を再作成する
- (SV') への可能な Interface Builder アウトレットを再作成します。
元の親ビュー (P) から:
前:
ビュー1
ビュー2
P
動かしたいSV
動きたくないSV
ビュー3
後:
ビュー1
ビュー2
P
動きたくないSV
ビュー3
P'
SVの「動きたい」
親ビューとして UIScrollView などがある場合、これはうまく一般化できないことを強調しておきます。次に、そのコピーは再び UIScrollView になり、望ましくない場合があります。
もう 1 つのことは、元の親ビュー (P) でサブビュー (SV) の一部を削除する場合、他の (移動できないサブビュー) がそれらを参照する場合、いくつかの制約を再作成する必要がある場合があります。しかし、とにかくそうするべきです。