0

我有很多在情节提要中创建的视图,但我希望它们能够动态更新它们的约束,而不必每次都使用 IBOutlet。

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

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

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

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

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

4

2 回答 2

0

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

translatesAutoresizingMaskIntoConstraints = true
UIView.animate(withDuration: 1, animations: {
    self.frame.size.height -= 200
})
于 2017-12-22T06:25:28.427 回答
0

NSLayoutConstraint从 iOS7 有一个名为 的属性identifier,从代码或 IB 你可以设置这个属性。
之后,要获得您正在寻找的约束,只需在特定视图中搜索它即可。
考虑这个UIView扩展:

func constraint(withIdentifier:String) -> NSLayoutConstraint? {
        return constraints.filter{ $0.identifier == withIdentifier }.first
    }
于 2017-12-22T05:43:09.527 回答