如何在没有IBOutlet或标识符的情况下更新Storyboard中的约束?

时间:2017-12-22 05:13:04

标签: ios nslayoutconstraint swift4 nslayoutanchor

我在故事板中创建了很多视图,但我希望他们能够动态更新其约束,而不必每次都使用IBOutlet。

我首先为我想要更新的视图的超视图创建一个自定义类,然后像这样更改其子视图的底部约束:

    myView.constraints.filter{ $0.firstAnchor is NSLayoutAttribute.bottom }.constant -= 200

' NSLayoutAttribute.bottom'似乎不是检查Anchor类型的正确方法。

如何检查我想要更改的约束类型?

我是否更正了我想要更改的视图的超级视图中的约束,而不是视图本身?

2 个答案:

答案 0 :(得分:0)

来自iOS7的

NSLayoutConstraint有一个名为identifier的属性,您可以通过代码或IB来设置此属性。
在那之后获得你正在寻找的约束只是在特定视图中搜索它的问题。
考虑这个UIView扩展名:

func constraint(withIdentifier:String) -> NSLayoutConstraint? {
        return constraints.filter{ $0.identifier == withIdentifier }.first
    }

答案 1 :(得分:0)

根据dahlia_boy的建议,我使用UIView.animate来实现此功能,但它似乎并不是永久性的:

translatesAutoresizingMaskIntoConstraints = true
UIView.animate(withDuration: 1, animations: {
    self.frame.size.height -= 200
})