问题与此类似: 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];
或者你能否提出一个更好的方法来解决这个问题?
答案 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()