1

我在控制台中的 AutoLayout 设置遇到一些冲突错误。

我知道他们的意思。

如何找到错误所指的视图?

我知道我看过一个 WWDC 视频,其中那个家伙在视图上设置了一些标识符,以便 AutoLayout 错误更具可读性。

此刻我有...

( 
    "<NSAutoresizingMaskLayoutConstraint:0x20964090 h=--& v=--& H:[UIView:0x1fdddbf0(480)]>", 
    "<NSLayoutConstraint:0x1fde8000 H:[UIView:0x1fdb35a0(320)]>", 
    "<NSLayoutConstraint:0x1fdb3dc0 H:|-(0)-[UIView:0x1fdb35a0]   (Names: '|':UIView:0x1fdb7040 )>", 
    "<NSLayoutConstraint:0x1fdb3d80 UIView:0x1fdb35a0.trailing == UIView:0x1fdb7040.trailing>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1fd66e30 h=-&& v=-&& UIView:0x1fdb7040.width == UIView:0x1fdddbf0.width>" 
) 

我知道这可能是导致错误的 AutoresizingMask 我只是不确定哪个 AutoresizingMask。

4

2 回答 2

0

我知道这是旧的,但对于其他任何发现它的人:您可以使用本文中的说明在 Interface Builder 中执行此操作。基本上,您使用以下代码覆盖生成那些“UIView:0xwhatever”子字符串的内部方法:

@implementation UIView (AutoLayoutDebugging)
- (void)setLayoutDebuggingIdentifier:(NSString *)readableName {
#ifdef DEBUG
    objc_setAssociatedObject(self, @"layoutDebuggingIdentifier",
                             readableName, OBJC_ASSOCIATION_COPY_NONATOMIC);
#endif
}
#ifdef DEBUG
- (NSString *)_layoutDebuggingIdentifier {
    return objc_getAssociatedObject(self, @"layoutDebuggingIdentifier");
}
#endif
@end

然后您可以选择 IB 中的任何视图并将用户定义的运行时属性“layoutDebuggingIdentifier”设置为您希望在 AutoLayout 错误中看到的任何字符串。

于 2014-11-16T17:14:40.823 回答
0

一般来说,当我在代码中添加约束并给它们分配名称时,我只会让它显示标签。如果您通过情节提要添加它们,您可以尝试将 XCode 标识符添加到您的视图中,但是当我遇到这个问题时,我通常会添加一些 NSLog 语句来打印出我感兴趣的视图,例如

NSLog(@"My View: %@", self.myView);

这将向我显示视图的 ID,希望类似于

My View: UIView:0x1fdddbf0

在你的情况下。

也就是说,我不确定即使知道这些观点对你有多大帮助。标准建议是为使用自动布局的视图关闭 Autoresizing Mask。我没有太多协调这些的经验,但看起来问题是一个视图设置为 320pt 宽,并且自动调整大小的蒙版添加了将其设置为 480pt 宽的约束。

于 2013-06-11T19:23:33.180 回答