gpt4 book ai didi

ios - 为编程 View 层次结构设置自动布局约束?

转载 作者:可可西里 更新时间:2023-11-01 02:59:51 24 4
gpt4 key购买 nike

我正在像这样以编程方式创建我的 View 层次结构:

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

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

我发现有关以编程方式设置窗口的问题,文档非常模糊。即使我观看了所有关于此事的三个 WWDC 视频,我也无法掌握如何做到这一点。

编辑:我遇到的问题似乎只与新的 iOS 7 相关。由于它处于 NDA 之下,我会将此讨论转移到指定的 Apple 开发者论坛。

最佳答案

AMBIGUOUS LAYOUT 意味着您没有为自动布局指定足够的信息来知道如何布局您的 View 。换句话说,您指定的内容有点含糊。

这与破坏约束截然不同,在破坏约束中,您有两个或多个约束告诉自动布局做不同的事情。

对于模棱两可的布局,自动布局将尝试弄清楚您的意图。希望那将是你想要的,但不能保证。因此警告。

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

有一本书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 我以编程方式创建的 View 我想使用自动布局。当您在控制台上看到任何看起来古怪的约束异常时,请牢记这一点。

关于ios - 为编程 View 层次结构设置自动布局约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com