【问题标题】:getting NSLayoutConstraints associated view获取 NSLayoutConstraints 关联视图
【发布时间】:2017-05-18 14:38:33
【问题描述】:

我试图遍历视图约束。

我添加到 view1:顶部、尾部、前导和高度约束。

top、trailing 和leading 指向主 ViewControllers 视图。

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

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

NSLayoutConstraint:0x6180000968a0 UIView:0x7fae6b409dd0.height == 146(活动)

所以我遍历了它的 superviews 约束(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">

【问题讨论】:

标签: ios swift uiview autolayout nslayoutconstraint


【解决方案1】:

您可以使用NSLayoutConstraintfirstItemsecondItem 属性来获取与约束相关的视图。请注意,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")

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多