Ori*_*rds 11 ios autolayout nslayoutconstraint swift
我有一些代码以编程方式创建自动布局约束,并将它们添加到视图中.
有两种方法可以做到这一点 - 调用addConstraintssuperView,或者设置.isActive = true每个约束(内部调用addConstraint)
选项1:
parent.addConstraints([
child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20),
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5) ])
Run Code Online (Sandbox Code Playgroud)
选项2:
child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20).isActive = true
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5).isActive = true
Run Code Online (Sandbox Code Playgroud)
我的问题是,做一个比另一个有什么好处吗?(表演/等)或它纯粹归结为风格.
(我不认为约束会在下一个布局过程之前进行评估,所以我认为我们不能逐个添加它们而不是在块中?)
如果它只是风格,那么社区的"更受欢迎"风格是什么?
(我个人更喜欢addConstraints,但它非常接近,我可以很容易地摇摆.isActive)
Fir*_*iro 26
根据有关addConstraint:设置的文档,active建议用于个别约束.(注意:active属性仅适用于iOS 8+).
在为iOS 8.0或更高版本开发时,将约束的active属性设置为YES,而不是直接调用addConstraint:方法.活动属性会自动添加和删除正确视图中的约束.(参考)
另外,如果你看一下addConstraint:它的接口定义有这个评论:
//此方法将在以后的版本中弃用,应该避免使用.而是将NSLayoutConstraint的活动属性设置为YES
话虽如此,实际上有一个第三[可能更好]的替代方案,即使用NSLayoutConstraint的类方法activate::
NSLayoutConstraint.activate([
child.topAnchor.constraint(equalTo: parent.topAnchor, constant: 20),
child.leftAnchor.constraint(equalTo: parent.leftAnchor, constant: 5) ])
Run Code Online (Sandbox Code Playgroud)
根据文档和界面文件,这也是推荐的解决方案.因此,如果您有多个约束,这将是一个简单的解决方案,可能在您的情况下首选.
(界面评论;强调我的):
以与设置active = YES相同的方式激活包含的数组中的每个约束的便捷方法.这通常比单独激活每个约束更有效.
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |