我有一个适用于纵向模式和横向模式的应用程序。当我转动我的设备时,我的一些标签和按钮没有显示,所以我希望将它们放在一边。
有一种方法可以删除约束
[self.view removeConstraint:myConstraint];
此方法删除了约束,因此当我将设备恢复为纵向模式时,我必须使用非常令人沮丧的代码再次创建约束。
有没有办法只是禁用约束而不实际删除它们?
答案 0 :(得分:3)
如果您将约束作为iVar,则可以将其从视图中删除,保留对它的强引用,然后在需要时将其添加回来。
它不再需要再次创建它。
答案 1 :(得分:1)
此方法删除了约束,因此当我将设备恢复为纵向模式时,我必须使用非常令人沮丧的代码再次创建约束。
停下来问自己为什么“真的很沮丧”。不应该!如果是的话,你做错了。
删除约束并将其替换为其他约束是标准过程,并且非常简单。在界面内外交换约束是你如何移动,特别是作为一种改变界面以响应旋转的方式。这只是让你的所有鸭子连续排起来的问题。将一组约束放在一个数组中;在另一个数组中放入另一组约束;当交换时,删除一组并添加另一组!很简单。
这是一些实际的代码(它是Swift,但不会对任何影响):
func doSwap(landscape:Bool) {
if landscape {
NSLayoutConstraint.deactivateConstraints(self.constraintsWith)
NSLayoutConstraint.activateConstraints(self.constraintsWithout)
} else {
NSLayoutConstraint.deactivateConstraints(self.constraintsWithout)
NSLayoutConstraint.activateConstraints(self.constraintsWith)
}
}
请注意使用新版iOS-8 NSLayoutConstraint.deactivateConstraints
和NSLayoutConstraint.activateConstraints
。这是一个真正的节省工作,因为您不需要将约束附加到任何特定视图;它会自动完成。
答案 2 :(得分:-3)
禁用所有表约束
ALTER TABLE TableName NOCHECK CONSTRAINT ConstraintName
- 启用所有表约束
ALTER TABLE TableName CHECK CONSTRAINT ConstraintName