我是Swift的新手。 在Apple开发教程中,我发现了以下代码片段
let button = UIButton()
button.widthAnchor.constraint(equalToConstant:44.0).isActive = true
有人可以帮我理解后一行会发生什么吗?
widthAnchor
是button
的计算属性,其类型为NSLayoutDimension
。
constraint(equalToConstant:)
是NSLayoutDimension
类返回
NSLayoutConstraint
对象。
因此...... .isActive = true
将后一个对象的isActive
属性设置为true
。
该对象在哪里生活"它与button
对象有什么关系?
由于
答案 0 :(得分:1)
UIButton
是UIView
的子类,因此它具有constraints
的{{1}}属性。
您创建的[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
时,iOS会将该约束的引用添加到相应NSLayoutConstraint
子类的constraints
属性中。相应的视图取决于约束中两个项的关系。
UIView
第一个只是最后一个案例,但为了清楚起见,我把它留在了这里。
兄弟姐妹示例
这是一个兄弟姐妹的例子。 relationship add to
------------ ------
siblings parent of the two siblings
parent/child parent
single view view
other first common ancestor
和button1
是button2
的子视图,因此引用了将container
的高度与button1
相关联的约束高度被添加到button2
的{{1}}数组中,这是他们的父视图:
constraints
container