0

3つのビューがあるとしましょう

 A|----------|
  | B|-----| |
  |  | C ▢ | |
  |  |_____| |
  |__________|    

ビュー B とビュー C を含む制約があるとします。

ドキュメントは、ビュー C への追加が違法であることを示唆しています。

制約には、受信ビューのスコープ内にあるビューのみが含まれる必要があります。具体的には、関係するすべてのビューは、受信ビュー自体、または受信ビューのサブビューである必要があります。ビューに追加された制約は、そのビューによって保持されていると言われます。制約を評価するときに使用される座標系は、制約を保持するビューの座標系です。

  • ビュー A に追加するかビュー B に追加するかは重要ですか?
  • 他のスーパービューではなく 1 つのスーパービューに追加することの影響はありますか?
  • 便利な意味はありますか?(たとえば、すべての制約を 1 か所にまとめた方が管理しやすいですか?)
4

1 に答える 1

1
  • ドキュメントから引用した要件を満たしている限り、ビュー A に追加するかビュー B に追加するかは問題ではありません。
  • 私が認識している意味はありません。レイアウトはどちらの方法でも同じです。 制約は、明示的に追加したビューに必ずしも追加されるとは限りません。UIView ヘッダー ファイルのコメント (以下の抜粋を参照) によると、それらは通常、制約に含まれるビューに最も近い先祖にインストールされます (ビューはこのための独自の祖先と見なされます)。
  • どちらの方法も本質的に他の方法よりも便利ではありません (A への参照がない場合を除きます。その場合、B に追加する方が明らかに便利です)。それは、アプリケーションの設定 (アウトレットや参照先など) によって異なります。 明示的に追加した場所に制約がインストールされていないことを考えると、どちらの方法も便利ではありません。ただし、システムが最終的にインストールする場所に追加する方が少し効率的だと思います。

編集:

このコメントは UIView.h からのもので、制約のインストールに使用されるメソッドの上にあります。

/* A constraint is typically installed on the closest common ancestor of the views involved in the constraint. 
 It is required that a constraint be installed on _a_ common ancestor of every view involved.  The numbers in a constraint are interpreted in the coordinate system of the view it is installed on.  A view is considered to be an ancestor of itself.
 */
于 2013-08-11T20:46:26.037 に答える