【问题标题】:Removing constraints that were added programatically删除以编程方式添加的约束
【发布时间】:2017-06-20 10:24:06
【问题描述】:

我阅读了许多关于如何删除通过情节提要添加的约束、拖动插座然后删除等的主题,但是如何删除以编程方式添加的约束?例如

firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor, constant: 15).isActive = true

如何停用它,然后在需要时再次启用它。也许应该是这样的?

firstView.removeConstraint(firstView.topAnchor.constraints(equalTo: secondView.bottomAnchor))

【问题讨论】:

    标签: ios swift ios-autolayout


    【解决方案1】:

    您应该将约束分配给ViewController 中的属性。然后将.isActive 设置为false 而不是true。

    您的代码应如下所示:

    let myConstraint = firstView.topAnchor.constraint(equalTo: secondView.bottomAnchor, constant: 15)
    

    现在,激活它:

    myConstraint.isActive = true
    

    并禁用它:

    myConstraint.isActive = false
    

    【讨论】:

    • @Sargot 欢迎您!如果您对此方法有任何疑问,请务必询问。
    • 是改变高度或宽度以保留对先前高度或宽度的引用并在添加新限制之前删除该约束的唯一方法吗?
    【解决方案2】:

    您需要保留对约束的引用。

    let constraintName: NSLayoutConstraint = firstView.topAnchor.constraint(equalTo: secondView.bottomAnchor, constant: 15)
    constraintName.isActive = true
    

    在不需要时禁用它。

    constraintName.isActive = false
    

    在需要时启用它。

    constraintName.isActive = true
    

    【讨论】:

    • NSLayoutYAxisAnchor 没有成员 constraints
    • 应该是topAnchor.constraint(),而不是topAnchor.constraints()。也不需要显式类型注释:NSLayoutConstraint
    • 我的错,我只是复制了他的台词。没有通过编译器。现在已经修复了。
    • 这是否意味着如果我们想在程序过程中任意更改按钮大小,它会累积大量的约束?没有别的办法吗?
    【解决方案3】:

    将来会弃用移除约束。

    这是执行相同操作的替代方法。

    使用以下方法启用/禁用约束

    Objective-C

    viewHeightConstraint.active = YES;      // Enable
    viewHeightConstraint.active = NO;       // Disable
    

    斯威夫特

    viewHeightConstraint.isActive = true   // Enable
    viewHeightConstraint.isActive = false  // Disable
    

    【讨论】:

    • 什么是viewHeight?这是您要激活/停用的视图吗?我认为它仅适用于约束。对不起,我完全不明白你的回答
    • YESTRUE 在 Objective-C 中是布尔值
    • 仅用于编程约束代码启用和禁用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2015-02-21
    • 2015-09-24
    相关资源
    最近更新 更多