UIButton
はUIView
のサブクラスであり、したがって、それは[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
最初は最後の特定のケースですが、わかりやすくするためにここに残しました。
兄弟例
ここ兄弟の一例です。button1
とbutton2
はcontainer
のサブビューであり、そうcontainer
ための高button1
「button2
への高さが」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)>]
ディメンションはおそらくヒープ上に存在し、コンプリントによって参照されます – awiebe