当前位置: 首页 > 知识库问答 >
问题:

获取NSLayoutConstraints关联视图

诸葛令
2023-03-14

我试图通过视图约束循环

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

顶部、尾部和前导是主ViewControllers视图。

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

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

NSLayoutConstraint:0x618000968A0 UIView:0x7fae6b409dd0。高度==146(激活)

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

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

NSLayoutConstraint: 0x618000096670H:|-(0)-[UIView: 0x7fae6b409dd0](活动,名称:'|': UIView: 0x7fae6b40a180)

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

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

我得到了更多我不在乎的东西。

所以我的问题是,我想遍历view1的所有超视图约束,并且只获取与之关联的约束。

在此示例中,UIView:0x7fae6b409dd0是视图1。

但是我不知道如何得到那个财产。

谢谢

如果我打印出约束。firstAnchor我获得了更多信息,但仍然无法获得相关视图。

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

NSLayoutXAxisAnchor:0x60800265480“UIView:0x7fae6b409dd0。尾部”

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

共有2个答案

宰父飞白
2023-03-14

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

[[NSString stringWithFormat:@"%@", constraint] containsString:[NSString stringWithFormat:@"%x", view.hash]]
乔伯寅
2023-03-14

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

然后,您可以使用操作符比较它是否是相同的对象

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")
 类似资料:
  • 我正在为实体对象上的延迟加载集合执行此操作: 我想返回一个实体对象,其中加载了多个延迟加载的集合,我可以这样做吗(传入一个列表并为单个条件设置多个关联?):

  • 问题内容: 以前,我将LegNo枚举定义为: 通过调用,我可以获得与每个枚举关联的值。 但是现在我决定让枚举是int -1而不是0,所以我决定使用私有构造函数进行初始化并设置其int值 现在唯一的事情就是因为我这样做,所以该方法不适用于枚举。我如何获得与int相关联的枚举?除了使用case switch语句或if-elseif-elseif之外,还有其他有效的方法吗? 我可以看到很多与从枚举获取i

  • 问题内容: 我在Javascript中有一个关联数组: 我如何获得这本字典的钥匙?即我想要 七年后的编辑:为了使术语正确-在Javascript中没有“关联数组”之类的东西-从技术上讲,这只是一个并且是我们想要的对象键。 问题答案: 您可以使用: 例: 请参阅下面的参考以获取浏览器支持。Firefox4.20,Chrome5,IE9支持该功能。如果浏览器不支持,则下面的链接包含一个代码片段,您可以

  • 根据这篇文章,我正在尝试反序列化与JooQ的一对多关联(没有代码生成)。 这是我的目标课程。 我的JooQ查询如下: 方法无法按预期工作。生成的SQL语句如下所示: 翻译后的postgres查询没有正确替换的key属性,这会导致SQL异常。 PS:我正在使用JooQ 3.14.0和postgres 11.5

  • 以前,我将LegNo枚举简单定义为: 通过调用,我能够获得与每个枚举关联的值。 现在唯一的问题是,因为我是这样做的,方法将不能用于枚举。如何获得与int关联的枚举?除了使用case switch语句或if-elseif-elseif之外,是否还有其他有效的方法来完成此操作 我可以看到很多关于从枚举中获得int值的问题,但我想要的是相反的问题。

  • 从《UML用户指南》第5章中,我发现了以下内容: 为了模拟结构关系, > 对于每对类,如果您需要从一个对象导航到另一个对象,请指定两者之间的关联。这是关联的数据驱动视图。 对于每对类,如果一个类的对象需要与另一个类的对象交互,而不是作为操作的参数,请指定两者之间的关联。这更像是一种由行为驱动的关联视图 这是我对第一类关联的理解,通过以下示例:一个类,User,具有三个属性,其中一个是另一个类,Ad