1. ホーム
  2. アイオス

[解決済み】Xcode 6のストーリーボードで「余白に制約をかける」とは?

2022-04-06 01:50:33

質問

私はオートレイアウトとコンストレイントを使用していますが、その際に Constrain to margins のオプションは、Xcode 5 には存在せず、デフォルトでチェックされています。

テストプロジェクトを作成し UITableView フレームをビューと同じサイズに設定し、制約を追加したViewController上にあります。

Xcode 6 テーブルビューがビューと同じフレームを持っているにもかかわらず、Xcodeは制約として-16を追加するよう提案します。

これで "Constrain to margin" オプションのチェックを外すと、Xcode 5 と同じ動作になり、制約として 0 を追加することが推奨されます。

また、Constrain to marginにチェックを入れて制約を追加すると、Xcode 5ではストーリーボード・ファイルを開くことができなくなったので、Xcode 6の新しい機能であることは間違いないようです。

私の質問をきちんと説明できているといいのですが。私は、"Constrain to margin"が実際に何をするのか、どのような場合に使用すべきで、どのような場合に使用しないのかを理解したいのです。非常に単純で明白なことであれば、申し訳ありません。

EDIT

でレイアウトの余白に関することを発見しました。 ここで議論 これと関係があるのでしょうか?

解決方法は?

と文句を言われるのが全く理解できない。 余白があると、iOS 8 より前のものでは、完全にクラッシュしてしまいます。 "

<ブロッククオート

xibファイルまたはストーリーボードで、マージンに対する制約を設定する しない iOS7ではアプリがクラッシュします。 しない を触らない限り、iOS7 デバイスでも UI の違いは生じません。 UIView.layoutMarginsUIView.preservesSuperviewLayoutMargins プロパティを追加してください。

iOS8における余白とは

レイアウトの余白は 内部 UIView は、レイアウトシステムがサブビューをレイアウトする際に、ビューの端とサブビューの間に隙間が空くように使用することができることを意味します。この点では、CSS のブロックに関連付けられた padding プロパティと非常によく似ています。

デフォルトでは UIView のレイアウトマージンは一辺が8ポイントであり、これは インターフェイスビルダー . しかし UIView.layoutMargins プロパティを使用することで、これらの値を調整することができます。

<ブロッククオート

でIBに余白を表示させることができます。 Editor > Canvas > Show Layout Rectangles(レイアウトレクタングルを表示する)。

余白は、ビューやサブビューのレイアウトに利用することができます。すべての UIView はデフォルトでマージンを持っていますが、マージンに関連する制約を設定した場合にのみ、ビューの配置に影響を及ぼします。

余白の使い方

Interface Builderで余白を使うには、その前に 相対的マージン オプションで制約を設定します。これは、制約を次のように指示する方法です。 ビューをレイアウトするときに、エッジの代わりにマージンを使用します。

ビューとそのサブビューの間に先行制約を設定する4つの異なる方法について見てみましょう。それぞれの制約について 最初に記述された関連は、サブビューの先頭の を、そして は、スーパービューの先頭の . ここで注意したいのは、チェックとアンチェックの状態です。 マージンとの相対的な関係 オプションは、制約がビューのマージンとエッジのどちらに結びついているかを定義するため、各制約端の

  1. 1項目目(uncheck)、2項目目(check)です。この場合、サブビューの左端をスーパービューの左マージンに合わせることを宣言しています(この画像のように)。

  1. 1番目の項目(チェックなし)、2番目の項目(チェックなし)。ともにエッジを使用。 ノットマージン . この場合、サブビューの左端をスーパービューの左端に揃えることを宣言しています。

  1. 1項目目(チェック)、2項目目(アンチェック)。この場合、サブビューの左マージンをスーパービューの左端に揃えることを宣言しています。このようなレイアウトでは、実際にはサブビューがスーパービューに重なってしまいます。

  1. 1つ目の項目(チェック)、2つ目の項目(チェック)。 サブビューとスーパービューのデフォルトマージンが同じなので、実はケース2と同じ効果になります。サブビューの左マージンをスーパービューの左マージンに合わせることを宣言しているのです。

余白の良さとは

この新機能(iOS8)は、マージンを使用することにした場合のみ、UI開発に影響を与えます。

マージンを使用すると、1つのプロパティの値を変更することで、共有のスーパービューに共通の関係を持つ複数のサブビューの配置を調整することができます。なぜなら、すべての関連する制約を固定値で設定するよりも、すべての間隔を更新する必要がある場合、各値を1つずつ変更するのではなく、このような1行のコードでスーパービューのマージンを更新することにより、関連するすべての配置を同時に修正することができるからです。

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

この利点を説明するために、次のケースでは、すべてのサブビューの左端は、そのスーパービューの左マージンに整列しています。したがって、スーパービューの左マージンを変更すると、すべてのサブビューに同時に影響します。