2017-02-03 1 views
1

私はSwiftを初めて使っています。 は、私は、コードNSLayoutConstraintオブジェクトは、.isActive = trueを指定してアクティブにするとどこに存在しますか?

let button = UIButton() 
button.widthAnchor.constraint(equalToConstant:44.0).isActive = true 

の次のスニペットを発見したアップルの開発チュートリアルで誰かが後者のラインで何が起こるか理解する私を助けることができますか?

widthAnchorbutton計算性であり、その種類はNSLayoutDimensionあります。

constraint(equalToConstant:)

NSLayoutConstraint

オブジェクトを返すNSLayoutDimensionクラスのメソッドです。

したがって... .isActive = trueは、後者のオブジェクトのisActiveプロパティをtrueに設定します。

このオブジェクトは「ライブ」とはどのように関連していますか?buttonオブジェクトにはどのような関係がありますか?

おかげ

+0

ディメンションはおそらくヒープ上に存在し、コンプリントによって参照されます – awiebe

答えて

1

UIButtonUIViewのサブクラスであり、したがって、それは[NSLayoutConstraint]あるconstraints性質を持っています。作成

NSLayoutConstraint

オブジェクトである(それは、ヒープ上に割り当てられている)と、それへの参照は、ボタン自体のconstraintsプロパティに追加されている:

let button = UIButton() 

print(button.constraints) 
[] // empty array 
button.widthAnchor.constraint(equalToConstant:44.0).isActive = true 

print(button.constraints) 
[<NSLayoutConstraint:0x6000000926b0 UIButton:0x7fbe6ff01940.width == 44 (active)>] 

NSLayoutConstraintは、最大2つのアイテム(ビュー)に関連しています。 NSLayoutConstraintを有効にすると、iOSは該当するUIViewサブクラスのconstraintsプロパティにその制約への参照を追加します。適切なビューは、制約内の2つのアイテムの関係に依存します。

relationship   add to 
------------   ------ 
siblings    parent of the two siblings 
parent/child   parent 
single view   view 
other     first common ancestor 

最初は最後の特定のケースですが、わかりやすくするためにここに残しました。


兄弟例

ここ兄弟の一例です。button1button2containerのサブビューであり、そうcontainerための高button1button2への高さが」constraintsアレイに追加さに関する制約への参照は、その親ビューである:

let button1 = UIButton() 
let button2 = UIButton() 
let container = UIView() 

container.addSubview(button1) 
container.addSubview(button2) 

button1.heightAnchor.constraint(equalTo: button2.heightAnchor, multiplier: 2).isActive = true 

print(container.constraints) 
[<NSLayoutConstraint:0x60800008ef10 UIButton:0x7f9ec7c03740.height == 2*UIButton:0x7f9ec7d06f90.height (active)>] 
+0

ありがとうございます。ビューのconstraintsプロパティがNSLayoutConstraintリファレンスを含むように設定できるように、NSLayoutConstraint initで渡された適切なビューオブジェクトへの参照ですか? –

+0

NSLayoutConstraint initは、制約によって制御される2つのUIViewへの参照を取得します。制約がアクティブになるまで、システムは共通の祖先を検索しません。これを確認するには、最初に2つのビューを作成してから制約を作成し、次に共通の祖先を作成し、ビューをサブビューとして追加し、最後に制約をアクティブにします。それは動作します。 – vacawama

+0

ありがとう!わかった! –

関連する問題