如何获得影响给定子视图的自动布局约束?

Posted

技术标签:

【中文标题】如何获得影响给定子视图的自动布局约束?【英文标题】:How do I get the autolayout constraints affecting a given subview? 【发布时间】:2013-09-18 00:25:57 【问题描述】:

尽管我喜欢将自动布局作为一个概念,但我似乎一直在纠结于实现细节。其中之一是我真的厌倦了存储应用于给定子视图的约束,因此我可以稍后删除和替换它们。

例如,当我第一次添加一个视图时,我可能会给它一个约束:

@"H:[view(==200)]|"

将其放置在屏幕的右侧,宽度为 200。如果我稍后想将其设置为 400 宽,并留出 200 大小的间隙怎么办?新的布局很简单,但直接与旧的相矛盾:

@"H:[view(==200)]-(200)]|"

所以我必须保存约束数组,以便以后可以使用它们来删除所述约束。 got 有一个更简单的解决方案,我在某处缺少。不幸的是,[视图约束]的明显解决方案没有意义,因为您不会将约束直接应用于给定视图,而是将它们应用于它的超级视图。 (另外,它往往充满了自动布局约束,使其自己的对象正确适合 - 而不是你想要删除的东西只是为了调整它的位置!)而且似乎没有任何 [view constraintsForSubview:] 选项可用.

我是瞎了吗?遗漏了什么?我真的需要交出现有约束的字典,以便以后修复它们吗?

【问题讨论】:

【参考方案1】:

您可以将 IBOutlets 设置为约束并更改代码中的常量参数。所以,如果你想要做的是像你的例子,你可以这样做(调用宽度约束widthCon):

self.widthCon.constant = 400;

这将使约束在 200 处保留在右侧(如果你想改变那个,你也可以为那个做一个出口)。

如果你确实想保存(或删除)某个视图的约束,你可以使用类似这样的方法:

for (NSLayoutConstraint *con in self.view.constraints) 
        if (con.firstItem == self.leftButton || con.secondItem == self.leftButton) 
            [self.portraitConstraints addObject:con];
        
    

当然,您可以在 UIView 上创建一个类别,使用类似的东西来创建 viewConstraintsForView: 方法。

【讨论】:

谢谢。不幸的是,这是一个故意设计的例子,所以以你所说的方式进入并修改它们可能不是最好的选择(尽管我一定会记住它),但你想出的那个快速“功能”看起来像我可能会加入很多我的 VC。

以上是关于如何获得影响给定子视图的自动布局约束?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式修改自动布局约束时视图不更新

您可以使用自动布局添加派生约束吗?

自动布局问题

如何正确设置水平图像视图的自动布局约束?

你如何自动布局约束按钮内的通知标签?

如何使用自动布局(约束)将子视图添加到 UIPageViewController?