当使用 .isActive = true 激活时,NSLayoutConstraint 对象位于何处?
Where do NSLayoutConstraint objects live when activated with .isActive = true?
我是 Swift 的新手。
在 Apple 开发教程中,我发现了以下代码片段
let button = UIButton()
button.widthAnchor.constraint(equalToConstant:44.0).isActive = true
有人可以帮助我了解后一行发生了什么吗?
widthAnchor
是 计算的 属性 的 button
,它的类型是 NSLayoutDimension
.
constraint(equalToConstant:)
是 NSLayoutDimension
class 返回一个
的方法
NSLayoutConstraint
对象。
因此....isActive = true
将后一个对象的isActive
属性设置为true
.
那个对象 "live" 在哪里,它与 button
对象有什么关系?
谢谢
UIButton
是 UIView
的子类,因此它有一个 constraints
属性 即 [NSLayoutConstraint]
.
您创建的 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
最多与两个项目(视图)相关。
当您激活 NSLayoutConstraint
时,iOS 将对该约束的引用添加到适当 UIView
子类的 constraints
属性。合适的视图取决于约束中两个项目的关系。
relationship add to
------------ ------
siblings parent of the two siblings
parent/child parent
single view view
other first common ancestor
第一个只是最后一个的特例,但为了清楚起见,我将其留在这里。
兄弟姐妹例子
这是一个兄弟姐妹的例子。 button1
和 button2
是 container
的子视图,因此将 button1
的高度与 button2
的高度相关的约束的引用添加到 [= container
的 19=] 数组是它们的父视图:
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)>]
我是 Swift 的新手。 在 Apple 开发教程中,我发现了以下代码片段
let button = UIButton()
button.widthAnchor.constraint(equalToConstant:44.0).isActive = true
有人可以帮助我了解后一行发生了什么吗?
widthAnchor
是 计算的 属性 的 button
,它的类型是 NSLayoutDimension
.
constraint(equalToConstant:)
是 NSLayoutDimension
class 返回一个
NSLayoutConstraint
对象。
因此....isActive = true
将后一个对象的isActive
属性设置为true
.
那个对象 "live" 在哪里,它与 button
对象有什么关系?
谢谢
UIButton
是 UIView
的子类,因此它有一个 constraints
属性 即 [NSLayoutConstraint]
.
您创建的 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
最多与两个项目(视图)相关。
当您激活 NSLayoutConstraint
时,iOS 将对该约束的引用添加到适当 UIView
子类的 constraints
属性。合适的视图取决于约束中两个项目的关系。
relationship add to
------------ ------
siblings parent of the two siblings
parent/child parent
single view view
other first common ancestor
第一个只是最后一个的特例,但为了清楚起见,我将其留在这里。
兄弟姐妹例子
这是一个兄弟姐妹的例子。 button1
和 button2
是 container
的子视图,因此将 button1
的高度与 button2
的高度相关的约束的引用添加到 [= container
的 19=] 数组是它们的父视图:
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)>]