22

私が理解しているサイズ変更管理の唯一の種類は、古典的なスプリングとストラット、別名「アンカーと整列」、または「マスクの自動サイズ変更」のようなものです。ただし、XCode 4.6 では、iOS 6 で導入された制約を使用した「自動レイアウト」がデフォルトであり、方法を習得すると、特定の単純なことは難しくなりますが、新しい配置の全世界が可能になります。 (明確にするために言うと、一部のユーザーは、自動レイアウトの戦いと戦わずに単純なビューを機能させることだけを気にする場合があるため、Matt によって早期に Autolayout をオフにする回避策が提案されました。これを以下に再現します)

iOS 6 Layout Constraints、Interface Builder の編集制約システムがわかりません。

ここに画像の説明を入力

XCode Interface Builder が自動的に制約を作成する場所 (ビューの端など) では、私が理解しているように動作するようです。

私が理解していないのは、ここに示されている .xib で、ここでも入手可能であり、緑とマゼンタの領域が一定の境界線 (それらの間の白い領域) を維持することができない理由です。 、ビューのサイズに何が起こっても。

つまり、緑色の領域を垂直方向にサイズ変更せず、水平方向にのみサイズ変更する必要がありますが、フォームの下部に固定することを主張しており、新しい空白のペン先から再び開始しますが、インターフェースビルダーを復元するため、緑とマゼンタのビューが再び表示されます。インターフェイス ビルダーが「ばかげた」状態になると、親ビューの下端からの距離に関して緑のビューの下端のみを定義することを主張し、それ以外の場合は (いくらいじっても) 使用しません。単なるドラッグ アンド ドロップ操作。Pin コマンドも試してみましたが、機能する pin コマンドが見つかりませんでした。

制約の 1 つを手放すには、インターフェイス ビルダーのメニューやドラッグ アンド ドロップと格闘するだけでは十分ではないようです。私は自分が何をすべきか理解できません。制約を削除しますか? どのように?IB Objects ペインまたは Utilities -> Size インスペクタのいずれからも、私が見る限り、制約はまったく削除できません。削除オプションがありますが、制約領域の「歯車」アイコン ボタンをクリックすると表示されるドロップダウン メニューでグレー表示されます。

理想的には、ビューが広くなるにつれて緑色の領域のサイズが変更されるといいのですが、高さが高くなったり短くなったりするのではありません。これは他のすべてのツールで明らかだと思いましたが、XCode + Autolayout では、まったくサイズ変更されないか、4 方向すべてでサイズ変更されます。やりたくないことをしている制約を削除または削除することはできません。別のビュー内にある各ビューに 4 つの制約が必要ですか?

(更新 1: あいまいな、または指定されていないレイアウトになる制約を削除することはできません。)

(更新 2: ときどき、uiview ペインが兄弟にスナップしない場合、その uiview を削除して再試行すると、兄弟に自然に「スナップ」され、制約は、親。)

(更新 3: Matt は彼の回避策を削除しました。以下に再掲します。)

そもそも Autolayout を望まず、古いスプリングとストラットを元に戻したいだけの人のための回避策:

ステップ 1: 自動レイアウトをオフにします。

ここに画像の説明を入力

ステップ 2: 正しい自動サイズ変更マスクを選択します。

ここに画像の説明を入力

4

2 に答える 2

12

Interface Builder で制約を編集する際の鍵は、ビューに追加したものをドラッグ アンド ドロップしないことです。代わりにコンストレイントを編集して移動および配置します。固定メニューを使用して、新しい制約を作成します。自動的に追加されたシステム制約を明確に置き換えるのに十分な数の新しい制約を追加したら、不要な制約を削除できます。

あなたの場合、次の制約を作成しました。

ここに画像の説明を入力

ドキュメントナビゲーターでわかりやすくするために、ビューの名前を「グリーン」と「マゼンタ」に変更しました。私がやったことは次のとおりです。

  • ビュー間の垂直方向の間隔を固定する
  • 各ビューを左右に固定
  • トップ ビューをスーパービューの上部から設定された高さと距離に固定しました
  • ボトムビューの下部をスーパービューの下部に固定しました。

これにより、必要なレイアウトが得られると思います。詳細を読みたい場合は、ここにこれについて非常に詳細に書いています。

于 2013-02-26T20:46:44.380 に答える
2

これは、iOS6 の新しい自動レイアウト モードをオフにしたくない場合の答えです。

トップ レベル ビューとすべてのサブレベル ビューのビュー モードが [Scale to Fill] である場合、この制約を削除できないため、この場合はアンカー モード "less than or equal" を使用します。2 つの色付きのビューは、サイズ (幅、高さ) または位置 (左上隅) として nib に保存されるのではなく、レイアウトを表す制約と共に保存されます。「等しい」の代わりに「以下」のレイアウトにアクセスするには、上の四角形をクリックします。次に、4 つの制約線が表示されます。選択したコントロールの下端から下端までの一番下の線を選択します。ビューを開き、タイプを Equal から Less than or Equal に変更します。

ここに画像の説明を入力

ビュー モードが [Scale to fill] でない場合は、その他の制約の変更が必要になります。この多面的なデザインは、古い「スプリングとストラット」よりも柔軟性がありますが、学ぶのはそれほど簡単ではありません。

使用できるより明白なモードは、2 つのオブジェクト間の制約を取得することです。なぜこれが難しいのか(できるときとできないときがある)は、まだわかりません。

オブジェクトからその親ビューへではなく、2 つのオブジェクト間に制約を表示することができたときのサンプルを次に示しますが、この状況では、いつでも Interface Builder を連携させることができれば、はるかに直感的な方法になります。上の正方形がビュー全体の高さに固定されていない状況を作成します。

ここに画像の説明を入力

上のカラー ビューがその下のビューへのアンカーを持っている場合、これは逆の制約が同じビューに反することができないことを絶対的に意味します。したがって、A を B に依存させることはできますが、B を同時に A に依存させることはできません。その場合、制約はビューの絶対的な高さまたは幅に依存するように切り替えられます。私が見つけたこの特定のケースでは、改善される前に信じられないほど直感的に実行できたことを再現するには、かなりの試行錯誤が必要なようです。

最後に、余分な制約が発生すると、上記の手順が機能しないように見えることがわかりました。これらの制約は、予想外のときに魔法のように追加されます。非常に微妙ですが、次のように、1 行ではなく 2 行が表示されるはずです。

ここに画像の説明を入力

制約を Equals から Less than or Equal に変更するだけで、Interface Builder に重複した制約をどんどん追加し続けることができます。これは XCode 4.6 のインターフェイス ビルダーのバグだと思います。また、レイアウトの制約は CococaTouch の比較的新しい部分であるため、アイテムをドラッグして移動する際の制約の自動作成に対するインターフェイス ビルダーのサポートにバグがあることに驚きはありません。

于 2013-02-26T17:38:25.357 に答える