以编程方式访问自动布局约束

时间:2013-12-13 17:10:29

标签: ios objective-c constraints autolayout

我有一个有很多子视图的视图,我将这些视图称为superview,子视图A,子视图B,子视图C等。

所以我需要访问我在subView A上设置的尾部空间约束来超级查看和修改它。此约束将出现在superview.constraints中。

但是,所有子视图都在它们和superview之间设置了前导/尾随空间约束。

因此,如果我记录superview.constraints,它将如下所示:

<__NSArrayM 0xac744e0>(
<NSLayoutConstraint:0x98f3500 H:|-(0)-[UILabel:0x98f2190]   (Names:     '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3540 H:[UILabel:0x98f2190]-(20)-|   (Names:   '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3580 V:[UILabel:0x98f2190]-(-4)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f35c0 V:[UIView:0x98f2770]-(42)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3600 H:[UIView:0x98f2770]-(20)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3640 H:|-(0)-[UIView:0x98f2770]   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3680 H:|-(0)-[UIView:0x98f2610]   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f36c0 H:[UIView:0x98f2610]-(0)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3700 V:[UIView:0x98f2610]-(1)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3740 V:[UIView:0x98f2920]-(107)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3780 H:[UIView:0x98f2920]-(20)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f37c0 H:|-(0)-[UIView:0x98f2920]   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3800 H:[UIButton:0x98f19c0]-(178)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3840 V:[UIButton:0x98f19c0]-(55)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3880 H:|-(0)-[UILabel:0x98f2a80]   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f38c0 V:[UILabel:0x98f2a80]-(109)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3900 H:[UILabel:0x98f2a80]-(20)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3940 H:|-(171)-[UIButton:0x98f2ff0]   (Names: '|':HeaderReusableView:0x98f1f40 )>,
<NSLayoutConstraint:0x98f3980 V:[UIButton:0x98f2ff0]-(55)-|   (Names: '|':HeaderReusableView:0x98f1f40 )>

我不知道哪个约束是我想要的。

3 个答案:

答案 0 :(得分:7)

好的我明白了。 NSLayoutConstraint有一个名为firstItem的属性和一个属性secondItem。这些是设置约束的视图。

通常secondItem将是视图本身。因此,view.constraints [0] .secondItem是view。

答案 1 :(得分:6)

为你感兴趣的人制作一个IBOutlet。你可以从画布中的约束(有时很难做),或者从左边场景列表中的约束列表中创建它们。

答案 2 :(得分:0)

另一种方式对我来说很简单,就是按Ctrl +将Constraint的Outlet拖到ViewController.m或ViewController.h文件中,你可以设置/获取它的常量,优先级,第一项,第二项等。