自動レイアウトと制約を使って作業していますが、XCode 6にはConstrain to margins
オプションがあり、これはXCode 5には存在せず、デフォルトでチェックされています。
テストプロジェクトを作成してから、ViewControllerにUITableView
をビューと同じサイズに設定し、制約を追加しました
XCode 6 tableviewがビューと同じフレームを持っていてもここで見ることができますXCodeが制約として-16を加えることを提案するのに対して.
「余白に拘束」オプションをオフにすると、XCode 5と同じように動作し、拘束として0を追加することを提案します。
また、[余白チェック]に[拘束]で制約を追加すると、XCode 5でストーリーボードファイルを開くことができなくなるため、XCode 6では間違いなく新しいものになることがわかりました。
うまくいけば、私は私の質問を正しく説明することができます。 「余白を制限する」が実際に何をするのか、そしていつ使うべきであるべきでないのかを理解したいのです。それが非常に単純で明白な何かであるならば、私は謝罪します。
編集
私は ここでの議論でレイアウトマージンについて何かを見つけました 、それがこれに関連しているかどうか疑問に思います。
「マージンがiOS 8以前のすべてで完全なクラッシュを引き起こすだろう」と人々が不満を述べている理由はまったくわかりません。
Xibファイルまたはストーリーボードのマージンに関連して制約を設定するDOES NOT iOS7でアプリをクラッシュさせる、およびDOES NOT iOS7デバイスでもUIの違いを生じさせないコードの
UIView.layoutMargins
およびUIView.preservesSuperviewLayoutMargins
プロパティに触れない限り。
レイアウトマージンは、サブビューをレイアウトするときにレイアウトシステムが使用できるUIView
の-interiorの周囲のパディングを表します。これにより、ビューのエッジとサブビューの間にギャップが確保されます。この点で、CSSのブロックに関連付けられているパディングプロパティに非常によく似ています。
デフォルトでは、UIView
の各辺には8ポイントのレイアウトマージンがあり、これはInterface Builderでは変更できません。ただし、iOS8でのみ使用可能なコードでUIView.layoutMargins
プロパティを設定することにより、これらの値を調整できます。
Editor> Canvas> Show Layout Rectangles:でIBにマージンを表示させることができます
マージンは、ビューとサブビューのレイアウトに役立ちます。すべてのUIView
にはデフォルトでマージンが付いていますが、マージンに関連する制約を設定した場合にのみビューの配置に影響します。
Interface Builderでマージンを使用する唯一の方法は、制約の設定中にmarginに対するrelativeオプションをチェックすることです。これは、制約をに向ける方法です。ビューをレイアウトするときに、エッジではなくマージンを使用します。
ビューとそのサブビューの間に主要な制約を設定する4つの異なる方法を見てみましょう。各制約について、説明されている最初の関連付けはサブビューの先頭、および2番目はスーパービューの先頭を確認します。細心の注意を払いたいのは、各制約端のmargin torelativeオプションのチェックおよびチェック解除ステータスです。これは、制約がビューのマージンまたはエッジに結び付けられるかどうかを定義するためです。
この新機能(iOS8)は、マージンを使用することにした場合にのみUI開発に影響します。
マージンを使用することにより、単一のプロパティの値を変更することにより、共有スーパービューとの共通の関係を共有する複数のサブビューの配置を調整できます。これは、関連するすべての制約を固定値で設定することよりも有利です。各値を1つずつ変更する代わりに、すべての間隔を更新する必要がある場合、スーパービューのマージンを1行で更新することにより、関連するすべての配置を同時に変更できるからです。このようなコード:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
この利点を説明するために、次の場合、すべてのサブビューの左端がスーパービューの左マージンに揃えられます。したがって、スーパービューの左マージンを変更すると、すべてのサブビューに同時に影響します。
IOS 8では、スーパービューの境界自体ではなく、スーパービューの境界に対する定義済みのマージンを基準にして制約を定義することができます。はい、それは完全にあなたがドキュメントで指摘したレイアウトマージンに関連しています。利点の1つは、マージンを動的に定義したり、デバイスの種類ごとに異なった方法で定義し直したりできることです。レイアウトは、制約を変更することなくそれに応じて更新されます。
いつ使用するか:この新しい柔軟性を利用したい場合。
使用しない場合:iOS 7以下で実行することを目標としているすべてのアプリ用。
UIViewのプロパティはlayoutMargins
です。 Apple Docs を参照してください。基本的にレイアウトの余白が8,8,8,8(デフォルト)の場合、コンテナの余白の先頭のスペースが0の制約のx位置は8になります。 これはiOS 8以降でのみ使用可能です。
自分の制約をコンテナのマージンに入れたくないという人のために:
Ctrlキーを押しながらクリックしてドラッグすると、制約作成ポップアップが表示されます。
デフォルトでマージンに対する制約を作成するようにメニューが表示された場合は、オプション/ altを押したままにして、コンテナのマージンではなくコンテナに対して制約を設定できるようにします。
これで、マージンではなく制約を作成するオプションが表示されます。これは私の用法ではWAY速くなります。