如何修改NSLayoutConstraint的multiplier

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改NSLayoutConstraint的multiplier相关的知识,希望对你有一定的参考价值。

参考技术A 看NSLayoutConstraintapi constant修改其都读
要改其属性移除constranit再加入新update

想修改肯定先找吧添加候记录第二 循环查找
ios7 没标识字段查找要判断相等才能找

如何在 UIButtons 之间以编程方式获取 NSLayoutConstraint?

【中文标题】如何在 UIButtons 之间以编程方式获取 NSLayoutConstraint?【英文标题】:How to get NSLayoutConstraint programmatically between UIButtons? 【发布时间】:2013-07-10 09:09:42 【问题描述】:

在一个视图中,我正在插入一个新的 UIButton,因为我一直在使用 AutoLayout,所以我需要获得下面要插入按钮的视图的约束。如何以编程方式获取 NSLayoutConstraint,以便我可以删除旧的约束,然后创建新的约束。谢谢。

编辑:

参考图表,我需要在B1和B2之间插入B3,所以我需要删除B1和B2之间已经设置的固定空间约束,我需要将B3底部连接到B2的顶部,将B3的顶部连接到B1的底部.

【问题讨论】:

您确定需要删除约束吗?你能展示一下约束是什么的图表/代码吗? 请检查编辑 酷,好的,你需要删除。好的,请稍等……实际上,现在无法回答。尽管oliverfoggin.com/an-auto-layout-experiment 我经常这样做,但请查看此处链接的 github 项目。 好的,我会检查谢谢... 我没有得到你需要的东西:绘制这个的所有约束?还是别的什么? 【参考方案1】:

我需要删除B1和B2之间已经设置的固定空间约束

以编程方式查找约束

您可以在视图约束中搜索B1,或者在创建时保留对NSLayoutConstraint 的引用。搜索B1 的约束可能效率较低:所有关系约束(视图到另一个视图)都是封闭superview 的一部分。假设您有B1 的句柄,您可以在其父视图中列出所有B1 约束,如下所示:

// Searching all relationship constraints involving b1
for item in self.view.constraints() 
    if let constraint = item as? NSLayoutConstraint 
        if let button = constraint.firstItem as? UIButton 
            if button == b1 
                println("firstItem found: \(constraint)")
            
        
        if let button = constraint.secondItem as? UIButton 
            if button == b1 
                println("secondItem found: \(constraint)")
            
        
    

记住一个约束

到目前为止,更简洁的方法是保留对您以后要修改或删除的NSLayoutConstraint 的引用。要在 Storyboard 中执行此操作,请创建您需要的约束。

然后将引用直接拖动到源文件中,以便稍后对其进行操作。

【讨论】:

【参考方案2】:

您可以关闭应用于视图的默认约束,如下所示。在您第一次以编程方式创建按钮时应用以下代码。

B1.translatesAutoresizingMaskIntoConstraints = NO;
B2.translatesAutoresizingMaskIntoConstraints = NO;
B3.translatesAutoresizingMaskIntoConstraints = NO;

使用AddSubView 将所有按钮添加到您的视图中后,再次设置您的约束,以符合您的需要,例如下面的示例。

// Center the middle one vertically
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:B2 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];

希望对您有所帮助,我在 Stack Overflew 中找到了最佳答案 Evenly space multiple views within a container view 最好的。

【讨论】:

感谢您的回答,我会检查并告诉您。 试过你的代码。新按钮被放置在第二个项目的位置(在你的例子中是 self.view),而不是通过向下移动第二个按钮。 避免我的例子只是使用 translatesAutoresizingMaskIntoConstraints 转换默认约束并仅应用您的逻辑 不确定如何在使用约束添加新按钮后关闭下面的所有子视图

以上是关于如何修改NSLayoutConstraint的multiplier的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 NSLayoutConstraint 方向?

如何修改这个 Python 定义函数代码?

如何检查 NSLayoutConstraint 是不是动画

如何创建返回 NSLayoutConstraint 的函数

滚动 UITableView 时如何创建 NSLayoutConstraint

如何确定 NSLayoutConstraint 是水平的还是垂直的?