为什么将我的viewcontroller添加到navigationcontroller似乎会干扰我的约束?

因为我发现有时很难通过故事板来获得我所期望的布局,所以我正在玩程序化约束…我知道在这里开始会更加困难 – 但希望这个“结束游戏”方法更有效率。 😉

当我在一个简单的viewController和mainView&centerView组合上使用以下代码时,一切都按预期进行,即mainView填充整个屏幕,而centerView只填充mainView的中心部分:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_centerView); NSDictionary *metrics = @{@"padding":@15.0}; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-padding-[_centerView]-padding-|" options:0 metrics:metrics views:viewsDictionary]]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-padding-[_centerView]-padding-|" options:0 metrics:metrics views:viewsDictionary]]; 

如果我将同一个viewController以root身份添加到navigationController(或者以root身份定义一个不同的VC并稍后推送),它就不会按预期工作:navBar下面的屏幕现在只是纯白色。

我为所有视图着色,缺少的视图似乎从导航栏下方的左上角“闪耀”了一下。 为什么导航控制器会“干扰”上述布局约束? 我的印象是导航控制器的根视图控制器的主视图默认填充导航栏下方窗口的“余数”。 或者我错了,需要在导航和我的mainView之间添加约束? 还是我错过了别的什么?

有任何想法吗?

顺便说一句:如果有人知道一个好的教程或博客或其他来源,处理它们之间以编程方式组成屏幕和导航(导航控制器,标签栏控制器,视图)和/或添加布局限制的问题,我也会非常感兴趣。

非常感谢提前。

好的,经过一些更多的测试,似乎至少在我的情况下我不应该设置view.translatesAutoresizingMaskIntoConstraints = NO; 对于rootView。 一旦我将其设置为YES(仅适用于此视图),它再次起作用……