针对不同设备方向的各种自动布局约束是否以编程方式且没有大小类?

时间:2015-12-11 14:40:15

标签: ios ios7 uiview autolayout constraints

问题与此类似: Autolayout and Device Orientation

updateViewConstraints永远不会被调用(因为在旋转时调用所提到的方法,在iOS 9.1模拟器上测试)。一般来说,这个主题似乎没有包含正确答案或者答案太旧了。

我不能使用大小类,因为该项目也应该支持iOS 7,并且它支持大小类但有很大的限制。

似乎我需要清除并重新创建每个旋转事件的所有约束:

1)哪种方法应该重新创建约束?

2)如何重新创建它们?也许我错误地删除了它们:

for (UIView *v in self.view.subviews)
{
    v.translatesAutoresizingMaskIntoConstraints = NO;
}
for (UIView *v in self.view.subviews)
{
    [v removeConstraints:v.constraints];
    [self.view removeConstraints:v.constraints];
}
[self.view removeConstraints:self.view.constraints];

或者你能否提出一个更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以在viewDidLoad上以编程方式创建两组不同的约束,并仅激活您要使用的约束

myPortraitConstraint = NSLayoutConstraint(item: someItem, attribute: .Left, relatedBy: .Equal, toItem: self, attribute: .Left, multiplier: 1.0, constant: 10
myPortraitConstraint.active = true

myLandscapeConstraint = NSLayoutConstraint(item: someItem, attribute: .Left, relatedBy: .Equal, toItem: self, attribute: .Left, multiplier: 1.0, constant: 0
myLandscapeConstraint.active = false

然后在旋转事件上切换你想要使用的约束

myPortraitConstraint.active = false
myLandscapeConstraint.active = true
self.view.layoutIfNeeded()