iOS约束样式:addConstraints vs.isActive=true

iOS约束样式:addConstraints vs.isActive=true,ios,swift,autolayout,nslayoutconstraint,Ios,Swift,Autolayout,Nslayoutconstraint,我有一些以编程方式创建自动布局约束的代码,并将它们添加到视图中 有两种方法可以做到这一点-在superView上调用addConstraints,或在每个约束(内部调用addConstraint)上设置.isActive=true 备选案文1: parent.addConstraints([ child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20), child.leftAnchor.constrain

我有一些以编程方式创建自动布局约束的代码,并将它们添加到视图中

有两种方法可以做到这一点-在superView上调用
addConstraints
,或在每个约束(内部调用addConstraint)上设置
.isActive=true

备选案文1:

parent.addConstraints([
    child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20),
    child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5) ])
备选案文2:

child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20).isActive = true
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5).isActive = true
我的问题是,做一件事比做另一件事有什么好处?(性能/等)还是纯粹的风格

(我认为在下一次布局过程之前不会对约束进行评估,因此我认为我们逐个添加约束而不是在块中添加约束并不重要??)

如果只是风格,社区“更喜欢”的风格是什么


(就我个人而言,我更喜欢addConstraints,但是它非常接近,而且我很容易会选择.isActive)

根据
addConstraint:
上的文档,建议为单个约束设置
active
属性。(注意:
active
属性仅适用于iOS 8+)

为iOS 8.0或更高版本开发时,请将约束设置为活动 属性设置为YES,而不是直接调用addConstraint:方法。 活动特性会自动从中添加和删除约束 正确的观点。()

另外,如果查看
addConstraint:
的接口定义,它有以下注释:

//此方法将在将来的版本中被弃用,并应 避免。相反,请将NSLayoutConstraint的活动属性设置为“是”


话虽如此,实际上还有第三种(可能更好)选择,那就是使用
NSLayoutConstraint
的类方法
activate:

NSLayoutConstraint.activate([
    child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20),
    child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5) ])
根据文档和接口文件,这也是推荐的解决方案。因此,如果您有多个约束条件,这将是一个简单的解决方案,并且在您的情况下可能更受欢迎

(接口注释;重点):

激活所包含约束中的每个约束的便利方法 数组,与设置active=YES的方式相同这通常更为重要 比单独激活每个约束更有效。


顺便说一句,看起来“activateConstraints”已被重命名为“activate”:感谢您的关注!我更新了它。为了将来,请随意编辑答案:D。再次感谢!