92

私がやりたいのは、フレーム/位置をリセットせずに、コンポーネント/ビューをXcodeのインターフェイスビルダーであるスーパービューから別のスーパービューにドラッグすることです。

これを行うときのXcodeのデフォルトの動作は、その寸法を維持しながら、新しいスーパービューで垂直方向および水平方向に移動されるビューを中央に配置するように見えます。これは、新しいスーパービューでビューを手動で再配置する必要があることを意味するため、非常にイライラします。しかし、移動する前に正しく配置していたので、幅/高さだけでなく、フレームのすべての属性を Xcode に記憶させたいと思います。これは可能ですか?

4

9 に答える 9

28

私はあなたたちを助けるかもしれない何かを見つけました!

タスクは、「子ビュー」を「親ビュー」に再グループ化して、階層的に親ビューの子になり、アクションの前と同じように表示されている物理的な位置を保持することです。

まず、親ビューを調整して、子ビューの領域を物理的にカバーします。次に、すべての子がビューリストでその下にあることを確認します。

次に、マウスですべての子を選択し、たとえば1ピクセル上と1ピクセル下に移動します(IBに変更があると言うだけです)。その後、子供を解放すると、魔法のように親の子供になり、自分の位置を表示し続けます。

OSX10.8.2とXcode4.6で動作します。

幸運を!

于 2013-02-04T19:36:16.350 に答える
22

ものの再配置に費やす多くの時間を節約することができ、これを行いました:

  1. 親ビューをInterface Builderでサブビューと同じレベルに追加します。
  2. テキスト エディターでストーリーボードを開き、親ビューのサブビュー タグ内にあるサブビューをコピーします。保存すると、XCode が更新されます。

あまりエレガントではありませんが、XCode が Shift などでサポートしていない理由がわかりません。

于 2012-10-12T17:15:15.490 に答える
10
  1. ある UIView から別の UiView (子ではない) または ScrollView に移動するすべてのコントロールを選択します

  2. カット/コピー

  3. 新しい UIView/ScrollView を既存の UIView にドラッグした後、一度クリックして選択しないでください。代わりに、新しい UIView/ScrollView をダブルクリックして、すべてのコントロールを貼り付けます。

  4. 距離の差はすべてのコントロール間で同じままですが、コントロールの再配置が必要になる場合があります。したがって、それらの位置を変更するまではどこもクリックしないでください。すべてのコントロールが既に選択されているため、ナビゲーション矢印ですべてのコントロールの位置を変更するか、もう一度選択する必要があります。

注:私はXCode 4.2を使用しています

于 2013-05-29T16:26:40.147 に答える
4

ストーリーボードを使用せずに、ステパンのソリューションと同様のことを行いました。ViewController のビューが開いているときの IB で:

  1. VC のメイン ビューに加えて別のビューを作成する
  2. すべてのサブビューを 1 つのビューから別のビューにドラッグして、2 番目のビューに移動します (左側のリストからドラッグすると位置がリセットされます) マウスを使用して IB からサブビューを選択できない場合は、左側のリストからすべてを選択してから、 「cmd」ボタンを使用して、IB パネルから最後のサブビューを 1 つ選択します。
  3. 最初のメイン ビューの最終ビューに戻します。
  4. 追加されたビューを削除して、すべて設定します。
于 2012-12-19T08:38:33.633 に答える
2

これは、サブビューを別のビューにコピーして位置を保持するための最良のソリューションです。

  1. サブビューで必要な項目を選択してから、
  2. エディタ -> 埋め込み -> 表示
  3. このビューをコピー (Cmd+C)
  4. 元に戻す (Cmd+Z) (サブビューが必要だったので)
  5. サブビューが必要なビューに移動して貼り付けます(Cmd + V)
  6. コピーして貼り付けた埋め込みビューを選択し、エディター -> 埋め込み解除

手順 6 で埋め込みビューが削除され、サブビューのみがコピーされます。

于 2017-07-13T11:19:07.300 に答える
1

別のアプローチを検出しました。それは基本的に: 移動 = 切り取り + 貼り付け

このようにします:

  • すべてのサブビューを新しい親ビューの子にする (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) の一部を削除する場合、他の (移動できないサブビュー) がそれらを参照する場合、いくつかの制約を再作成する必要がある場合があります。しかし、とにかくそうするべきです。

于 2016-10-11T09:06:22.673 に答える