为编程视图层次结构设置自动布局约束?
Posted
技术标签:
【中文标题】为编程视图层次结构设置自动布局约束?【英文标题】:Setting up auto layout constraints for programmatic view hierarchy? 【发布时间】:2013-06-27 07:53:58 【问题描述】:我正在像这样以编程方式创建视图层次结构:
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];
这两个 VC 都是从 XIB 加载的,在这两种情况下都使用自动布局。一切看起来都不错,但是当我实际执行 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
所以我的问题是,我该如何摆脱它们? 或者更笼统地说,您如何使用自动布局以编程方式设置窗口和视图层次结构?
我发现有关以编程方式设置窗口的文档非常含糊。即使我观看了所有关于此事的三个 WWDC 视频,我也无法掌握如何做到这一点。
编辑:我遇到的问题似乎只与新的 ios 7 有关。由于它处于保密协议之下,我将把这个讨论转移到指定的 Apple 开发者论坛。
【问题讨论】:
【参考方案1】:AMBIGUOUS LAYOUT
表示您没有指定足够的 Auto Layout 来了解如何布置视图。换句话说,您指定的内容有点模糊。
这与损坏的约束完全不同,在这种情况下,您有两个或多个约束来告诉自动布局做不同的事情。
对于不明确的布局,自动布局将尝试找出您的意图。希望这将是您想要的,但不能保证。因此发出警告。
这个答案并不是告诉你如何开始的地方。但幸运的是,现在出现了更多自动布局资源。
有一本书iOS Auto Layout Demystified 。虽然我已经买了它,但我还没有机会阅读它。不过看起来确实不错。
另外,请查看 Ole Begemann 的优秀文章 10 Things You Need To Know About Cocoa Autolayout。
有关入门教程,请查看 Ray wenderlich 的 Beginning Auto Layout in iOS 6: Part 1/2。
最后,如果我可以说每次都有一个自动布局的东西让我受益,那就是忘记将setTranslatesAutoresizingMaskIntoConstraints
标志设置为NO
,以便我以编程方式创建我想使用自动布局的视图。当您在控制台上看到任何看起来很奇怪的约束异常时,请记住这一点。
【讨论】:
我了解调试的一般原理和方法,但我的问题与我如何在代码中从头开始构建视图层次结构有关。我无法将我的 UIWindow 连接到它的超级视图,因为它没有。以上是关于为编程视图层次结构设置自动布局约束?的主要内容,如果未能解决你的问题,请参考以下文章
错误:线程 1:“无法设置未准备好约束的视图层次结构的布局。”使用自动布局时