我不能让它上班,我不知道为什么......其他问题+答案很遗憾没有帮助。
经测试的设备:
iPhone 6
iPad 2
相关代码:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator){
updateConstraints()
}
override func viewWillLayoutSubview() {
updateConstraints()
}
func updateConstraints() {
if UIDevice.currentDevice().orientation.isLandscape {
NSLayoutConstraint.activateConstraints(layoutLandscape!)
NSLayoutConstraint.deactivateConstraints(layoutPortrait!)
}
else {
NSLayoutConstraint.activateConstraints(layoutPortrait!)
NSLayoutConstraint.deactivateConstraints(layoutLandscape!)
}
view.layoutIfNeeded()
}
layoutLandscape和layoutPortrait是约束数组。
这确实有效:
- iPad加载视图,肖像和风景
- iPad旋转视图,纵向和横向
- iPhone加载视图,肖像和风景
- iPhone旋转视图,仅横向 - >肖像
不起作用:
- iPhone肖像 - >风景
当我在故事板中默认激活肖像时,iPhone旋转以这种方式工作。如果我将其更改为横向约束,则纵向 - >景观作品,另一个没有。
错误信息(这也没有真正帮助......)只是我打破了一些限制(这些限制很多,所以太难以缩小范围),但后来我想知道为什么它确实有效在iPhone上以两个方向加载视图 为什么它完全在iPad上运行?它并不像iPhone那样具有比iPhone或类似物更高的分辨率。
谢谢:)
答案 0 :(得分:3)
激活布局约束时,会立即检查它们是否与其他约束冲突。如果是这样,有些会被破坏,即被删除。
在您的代码中,这可能会发生,因为您首先激活约束,此时您有太多的冲突约束。
所以第一种方法是首先停用不再相关的那些,然后激活新的(而不是反过来)。
另一种被认为更有效的方法是不激活和停用约束,而是将当前相关的优先级设置为999,将不相关的优先级设置为1。 (注意:它是999而不是1000。)