6

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

po [[UIWindow keyWindow] _autolayoutTrace]

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

*<UIWindow:0x108f537f0> - AMBIGUOUS LAYOUT
|   *<UIView:0x109409850>
|   |   *<_UILayoutGuide:0x109409c10> - AMBIGUOUS LAYOUT
|   |   *<_UILayoutGuide:0x10940a540> - AMBIGUOUS LAYOUT

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

4

2 回答 2

5

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

在此处输入图像描述

于 2013-09-24T09:22:43.167 回答
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];
}

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

@interface UIWindow()

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

@end

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

在我的应用程序中,无论我在哪里调用 [[UIWindow keyWindow] _autolayoutTrace],我都会导入 UIWindow_AutoLayoutDebug.h

我从 raywenderlich.com 团队的“iOS 6 by tutorials”第 1 卷一书中了解到如何在代码中调用 [[UIWindow keyWindow] _autolayoutTrace]。延迟通话的想法是我自己的。

于 2013-10-02T04:03:10.733 回答