在约束属性中找不到为UIView创建的约束

时间:2018-03-09 16:39:30

标签: ios swift layout nslayoutconstraint

根据文档,约束实例属性是

  

视图所持有的约束。

var constraints: [NSLayoutConstraint] { get }

但是当我用

创建它们时
  SampleView.rightAnchor.constraint(equalTo: right ,constant: rightConstant).isActive = true 

所以它给我打印了一个约束

<NSLayoutConstraint:0x1c4281540 UIButton:0x103d1d030'Next'.right == UIView:0x103d04740.right   (active)>

但约束属性没有显示任何内容。空数组[],但同时 当我定义像heightAnchor和widthAnchor

这样的约束时
   sampleView.heightAnchor.constraint(equalToConstant: 50).isActive = true
   sampleview.widthAnchor.constraint(equalToConstant: 60).isActive = true, and constraints array is not empty 

   [<NSLayoutConstraint:0x1c028bd10 UIButton:0x103d1c5e0'Skip'.height == 50   (active)>,
    <NSLayoutConstraint:0x1c028bf40 UIButton:0x103d1c5e0'Skip'.width == 60   (active)>]

如果有人知道,为什么会这样?

2 个答案:

答案 0 :(得分:1)

约束可能位于UIView right的约束数组中。 heightwidth约束由视图本身保存,因为它们是仅与SampleView本身相关的约束,而右锚定约束与UIView相关{{1 }}

在处理Interface Builder中的约束时,层次结构在视觉上更清晰。

答案 1 :(得分:1)

宽度和高度约束被添加到视图本身,但如果不是两个子视图之间的共享父级,则将其他视图的约束添加到另一个视图中,如果它不是父视图,请参阅此

enter image description here

所以,在你问任何观点之前,你应该记住上面的照片