1

UIView在一个包含六个UIButtons.
我写了一些约束来支持横向模式和纵向模式,并将它们放在两个不同的数组中:portraitModeConstraintslandscapeModeConstraints. 当模式改变时,旧的约束被删除并添加正确的数组。

当我以纵向模式加载视图时没有问题。所有约束都可以正常工作,但是当我打开 iOS 模拟器时,我收到了很多警告。但是我的限制有效,我测试了它们。产生问题的约束来自 autoResizingMask。所以我在我的视图控制器上使用

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

这没有改变。所以我调试了一下,发现和之间没有区别setTranslatesAutoresizingMaskIntoConstraints:NOsetTranslatesAutoresizingMaskIntoConstraints: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];

4

1 回答 1

1

堆栈有同样的问题,当控制器嵌入导航控制器时,我正在做self.view.setTranslatesAutoresizingMaskIntoConstraints(false)的视图是黑色的。实际上没有理由在 self.view 上设置 transl.....。您需要将其应用于子视图。自动布局指南

于 2014-12-30T14:01:13.837 回答