AutoLayout冲突错误

时间:2013-06-11 14:55:01

标签: ios objective-c autolayout

我在控制台中为我的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导致错误我只是不确定WHICH AutoresizingMask。

2 个答案:

答案 0 :(得分:0)

通常我只在代码中添加约束并为其指定名称时才显示标签。如果您通过故事板添加它们,您可以尝试将XCode标识符添加到您的视图中,但是当我遇到该问题时,我通常会添加一些NSLog语句来打印出我感兴趣的视图,例如

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

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

My View: UIView:0x1fdddbf0

在你的情况下。

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

答案 1 :(得分:0)

我知道这已经过时了,但对于其他发现此问题的人来说:您可以使用this post中的说明在Interface Builder中执行此操作。基本上你覆盖生成那些&#34; UIView:0xwhatever&#34;的内部方法。带有此代码的子字符串:

@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中的任何视图并设置用户定义的运行时属性&#34; layoutDebuggingIdentifier&#34;到你想在AutoLayout错误中看到的任何字符串。