获取NSLayoutConstraints关联视图

时间:2017-01-04 10:27:11

标签: ios swift uiview autolayout nslayoutconstraint

我试图循环查看视图约束。

我添加到view1:top,trailing,leading和height constraints。

top,trailing和leading是ViewControllers的主视图。

如果我遍历view1的约束,我只能看到高度约束。

for constraint in view1.constraints {
    print(constraint)
}
  

NSLayoutConstraint:0x6180000968a0 UIView:0x7fae6b409dd0.height == 146(有效)

所以我通过它的超视图约束(ViewControllers主视图)循环,我得到了很多约束,其中一些与view1相关联。

for constraint in view1.superview?.constraints {
    print(constraint)
}
  

NSLayoutConstraint:0x618000096670 H:| - (0) - [UIView:0x7fae6b409dd0](有效,姓名:' |':UIView:0x7fae6b40a180)

     

NSLayoutConstraint:0x6180000974d0 H:[UIView:0x7fae6b409dd0] - (0) - | (活跃,姓名:' |':UIView:0x7fae6b40a180)

     

NSLayoutConstraint:0x618000097520 V:| - (0) - [UIView:0x7fae6b409dd0](有效,姓名:' |':UIView:0x7fae6b40a180)

我得到了一些我不在乎的东西。

所以我的问题是我想遍历所有view1的超级视图约束,并只得到与之关联的那些。

在此示例中,UIView:0x7fae6b409dd0是view1。

但我无法弄清楚如何获得该财产。

由于

如果我打印出来constraint.firstAnchor我会获得更多信息,但仍然无法获得相关视图。

  

NSLayoutXAxisAnchor:0x608000265480" UIView:0x7fae6b409dd0.leading">

     

NSLayoutXAxisAnchor:0x608000265480" UIView:0x7fae6b409dd0.trailing">

     

NSLayoutXAxisAnchor:0x608000265480" UIView:0x7fae6b409dd0.top">

2 个答案:

答案 0 :(得分:1)

您可以使用firstItem的{​​{1}}和secondItem属性来获取与约束相关的视图。请注意,NSLayoutConstraint可选,必须解包。

然后您可以使用secondItem运算符来比较它是否是同一个对象:

===

答案 1 :(得分:0)

一种简单的方法是比较约束对象中是否存在视图的哈希码:

[[NSString stringWithFormat:@"%@", constraint] containsString:[NSString stringWithFormat:@"%x", view.hash]]