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