我UIView
在一个包含六个UIButtons
.
我写了一些约束来支持横向模式和纵向模式,并将它们放在两个不同的数组中:portraitModeConstraints
和landscapeModeConstraints
. 当模式改变时,旧的约束被删除并添加正确的数组。
当我以纵向模式加载视图时没有问题。所有约束都可以正常工作,但是当我打开 iOS 模拟器时,我收到了很多警告。但是我的限制有效,我测试了它们。产生问题的约束来自 autoResizingMask。所以我在我的视图控制器上使用
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
这没有改变。所以我调试了一下,发现和之间没有区别setTranslatesAutoresizingMaskIntoConstraints:NO
,setTranslatesAutoresizingMaskIntoConstraints:YES
这真的很奇怪,我无法理解这种行为。但是,我像这样手动删除了约束:
[self.view removeConstraints:self.view.constraints];
现在,约束在纵向和横向(UIButtons 在正确的位置)都完美地工作,但是我的背景UIView
变成黑色并且背景图像消失了。
编辑:当设备旋转时,我的一个函数viewController
被调用:
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 持续时间:(NSTimeInterval)duration;
在那里我检查toInterfaceOrientation
是风景还是肖像。当它是肖像时,我这样做:
[self.view removeConstraints:self.landscapeModeConstraints];
[self.view addConstraints:[NSArray arrayWithArray:self.portraitModeConstraints]];
[self.view layoutSubviews];
当它是风景时,我会这样做
[self.view removeConstraints:self.portraitModeConstraints];
[self.view addConstraints:[NSArray arrayWithArray:self.landscapeModeConstraints]];
[self.view layoutSubviews];