Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取与视图关联的NSLayoutConstraints_Ios_Swift_Uiview_Autolayout_Nslayoutconstraint - Fatal编程技术网

Ios 获取与视图关联的NSLayoutConstraints

Ios 获取与视图关联的NSLayoutConstraints,ios,swift,uiview,autolayout,nslayoutconstraint,Ios,Swift,Uiview,Autolayout,Nslayoutconstraint,我试图通过视图约束循环 我在view1中添加了:顶部、尾部、前导和高度约束 顶部、尾部和前导是主视图控制器视图 如果循环查看view1的约束,则只会看到高度约束 for constraint in view1.constraints { print(constraint) } NSLayoutConstraint:0x618000968A0 UIView:0x7fae6b409dd0.height==146(活动) 所以我循环了它的SuperView约束(ViewControllers

我试图通过视图约束循环

我在view1中添加了:顶部、尾部、前导和高度约束

顶部、尾部和前导是主视图控制器视图

如果循环查看view1的约束,则只会看到高度约束

for constraint in view1.constraints {
    print(constraint)
}
NSLayoutConstraint:0x618000968A0 UIView:0x7fae6b409dd0.height==146(活动)

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

for constraint in view1.superview?.constraints {
    print(constraint)
}
NSLayoutConstraint:0x61800096670 H:|-(0)-[UIView:0x7FAE6B40DD0](活动,名称:“|”):UIView:0x7fae6b40a180)

NSLayoutConstraint:0x61800097400 H:[UIView:0x7FAE6B40DD0]-(0)-|(活动,名称:“|”):UIView:0x7fae6b40a180)

NSLayoutConstraint:0x61800097520 V:|-(0)-[UIView:0x7FAE6B40DD0](活动,名称:“|”):UIView:0x7fae6b40a180)

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

所以我的问题是,我想循环查看view1的所有superviews约束,只获取与其关联的约束

在本例中,
ui视图:0x7fae6b409dd0
是视图1

但是我想不出怎么得到那笔财产

谢谢


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

NSLayoutXAxisAnchor:0x60800265480“UIView:0x7fae6b409dd0.前导”>

NSLayoutXAxisAnchor:0x60800265480“UIView:0x7fae6b409dd0.training”>

NSLayoutXAxisAnchor:0x60800265480“UIView:0x7fae6b409dd0.top”>


您可以使用
NSLayoutConstraint
firstItem
secondItem
属性来获取与约束相关的视图。请注意,
secondItem
是可选项,必须展开

然后,您可以使用
==
操作符比较它是否是同一对象:

let constraints = view1.superview!.constraints
var count = 0

print("superview has \(constraints.count) constraints")

for constraint in constraints {
    if constraint.firstItem === view1 {
        count += 1
        print(constraint)
    } else if let secondItem = constraint.secondItem, secondItem === view1 {
        count += 1
        print(constraint)
    }
}

print("\(count) of them relate to view1")

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

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

使用NSLayoutConstraint类的firstItem和secondItem属性进行筛选。@NareshReddyM如何从中获取视图?第一/第二项是AnyObjectCheck此线程的第一个答案谢谢,constraint.firstItem.isDescendant(of:view1)这对我来说很有用: