为程序化视图层次结构设置自动布局约束?

ABe*_*its 9 uikit ios autolayout uiview-hierarchy

我正在以编程方式创建我的视图层次结构,如下所示:

UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIViewController1* viewController1 = [[UIViewController1 alloc] init];
UIViewController2* viewController2 = [[UIViewController2 alloc] init];

UINavigationController* navigationController = [[UINavigationController alloc] init];
[navigationController setViewControllers:@[viewController1, viewController2] animated:NO];

[window setRootViewController:navigationController];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

两个VC都是从XIB加载的,在这两种情况下都使用autolayout.一切看起来都不错但是当我真的做了po [[UIWindow keyWindow] _autolayoutTrace]一件事时,我AMBIGUOUS LAYOUT在控制台中收到了一些令人担忧的警告:

*<UIWindow:0xc63bec0>
|   *<UILayoutContainerView:0xd3d79b0> - AMBIGUOUS LAYOUT
|   |   *<UINavigationTransitionView:0xd3d8b60> - AMBIGUOUS LAYOUT
|   |   |   *<UIViewControllerWrapperView:0xd566c00> - AMBIGUOUS LAYOUT
|   |   |   |   *<UIView:0xc66b290> - AMBIGUOUS LAYOUT
|   |   |   |   |   *<UIView:0xc66b0e0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   *<MKMapView:0xd504800> - AMBIGUOUS LAYOUT
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何摆脱它们?或者更一般地说,如何使用自动布局以编程方式设置窗口和查看层次结构?

我发现文档在以编程方式设置窗口时非常模糊.即使我在这个问题上观看了所有三个WWDC视频,我也无法控制如何做到这一点.

编辑:它似乎是我刚刚与新的iOS 7有关的问题.由于它是在NDA下我将把这个讨论转移到指定的Apple Developer Forums.

Max*_*eod 1

AMBIGUOUS LAYOUT意味着您没有为自动布局指定足够的信息来了解如何布局您的视图。换句话说,你所指定的内容有点模糊。

这与破坏的约束有很大不同,在破坏的约束中,您有两个或多个约束来告诉自动布局执行不同的操作。

对于不明确的布局,自动布局将尝试找出您的意图。希望这就是您想要的,但不能保证。因此发出警告。

这个答案并不是真正告诉您如何开始的地方。但值得庆幸的是,现在出现了更多自动布局资源。

有本书《iOS Auto Layout Demystified》。虽然我已经买了,但还没有机会读。不过看起来确实不错。

另外,请查看 Ole Begemann 的优秀文章《关于 Cocoa Autolayout 您需要了解的 10 件事》

有关入门教程,请查看 Ray wenderlich 的Beginning Auto Layout in iOS 6: Part 1/2

最后,如果我可以说,有一个自动布局每次都让我着迷,那就是忘记为我以编程方式创建的视图设置标志setTranslatesAutoresizingMaskIntoConstraintsNO表明我想使用自动布局。当您在控制台上看到任何看起来怪异的约束异常时,请记住这一点。