ios7空autolayout布局已经模棱两可

Sim*_*yer 6 ios autolayout ios7

我刚刚创建了一个针对iOS7的"单视图应用程序"的空iOS项目,但是当我运行空项目并通过键入以下内容检查我的viewtree时:

po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)

我得到的结果是两个布局指南已经模棱两可

*<UIWindow:0x108f537f0> - AMBIGUOUS LAYOUT
|   *<UIView:0x109409850>
|   |   *<_UILayoutGuide:0x109409c10> - AMBIGUOUS LAYOUT
|   |   *<_UILayoutGuide:0x10940a540> - AMBIGUOUS LAYOUT
Run Code Online (Sandbox Code Playgroud)

是否有理由摆脱这些警告 - 或者我可以简单地忽略它们?

Ant*_* MG 5

如果您不想使用Autolayout或转到Interface Builder并自行添加布局,您可以忽略它们(您甚至可以让XCode添加它认为需要的布局)

在此输入图像描述


bil*_*tum 5

iOS 6也是如此.

我想有时需要时间限制"安定下来",而不是模棱两可.根据WWDC 2012视频"掌握自动布局的最佳实践",可以暂时容忍歧义(不同于不可满足性,这会立即引发异常).

如果你想向自己证明你的约束没有保持模糊,那么为[[UIWindow keyWindow] _autolayoutTrace]创建一个包装器并在短暂的延迟后调用它:

- (void)viewDidAppear:animated
{
    [super viewDidAppear:animated]; 

    [self performSelector:@selector(wrapperForLoggingConstraints) withObject:nil afterDelay:.3];
}

- (void)wrapperForLoggingConstraints
{
    [[UIWindow keyWindow] _autolayoutTrace];
}
Run Code Online (Sandbox Code Playgroud)

您必须在UIWindow上创建一个类别才能使其工作:

@interface UIWindow()

+ (UIWindow *)keyWindow;
- (NSString *)_autolayoutTrace;

@end
Run Code Online (Sandbox Code Playgroud)

我把这个类别放在它自己的头文件UIWindow_AutoLayoutDebug.h中

我在我的应用程序中调用[[UIWindow keyWindow] _autolayoutTrace],我导入UIWindow_AutoLayoutDebug.h

我从raywenderlich.com团队的第1卷"iOS 6 by tutorials"一书的代码中学到了调用[[UIWindow keyWindow] _autolayoutTrace]的知识.延迟通话的想法是我自己的.