Ios 获取与视图关联的NSLayoutConstraints
我试图通过视图约束循环 我在view1中添加了:顶部、尾部、前导和高度约束 顶部、尾部和前导是主视图控制器视图 如果循环查看view1的约束,则只会看到高度约束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
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)这对我来说很有用: