NSLayoutConstraint错误:进行完整的子视图

时间:2013-03-29 09:16:33

标签: iphone objective-c cocoa autolayout

我正在制作全帧子视图,(子视图的帧=超级视图的界限)

我按照以下方式进行了扩展

[self addConstraints:[NSLayoutConstraint
                           constraintsWithVisualFormat:@"H:|-0-[subview]-0-|"
                           options:NSLayoutFormatDirectionLeadingToTrailing
                           metrics:nil
                           views:NSDictionaryOfVariableBindings(subview)]];
[self addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|-0-[subview]-0-|"
                      options:NSLayoutFormatDirectionLeadingToTrailing
                      metrics:nil
                      views:NSDictionaryOfVariableBindings(subview)]];

但运行时错误发生,显示以下错误。

"<NSAutoresizingMaskLayoutConstraint:0x1001bb700 h=--& v=--& H:[IUView:0x10015dcc0(960)]>",
"<NSLayoutConstraint:0x1001911d0 H:|-(0)-[IUBGView:0x1001783f0]   (Names: '|':IUView:0x10015dcc0 )>",
"<NSLayoutConstraint:0x1001910e0 H:[IUBGView:0x1001783f0]-(0)-|   (Names: '|':IUView:0x10015dcc0 )>",
"<NSLayoutConstraint:0x10017bbf0 H:|-(0)-[NSImageView:0x100160050]   (Names: '|':IUBGView:0x1001783f0 )>",
"<NSLayoutConstraint:0x10015d7f0 H:[NSImageView:0x100160050]-(0)-|   (Names: '|':IUBGView:0x1001783f0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1001a6a80 h=--& v=--& H:[NSImageView:0x100160050(0)]>"
     

将尝试通过违反约束来恢复   

     

将NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints设置为YES,以便在发生这种情况时自动调用[NSWindow visualizeConstraints:]。和/或,在objc_exception_throw上中断以在调试器中捕获它。

你能解释一下我错过的吗?

1 个答案:

答案 0 :(得分:1)

您似乎没有转变手工创建的视图的“translatesAutoresizingMaskInotConstraints”功能。

someView.translatesAutoresizingMaskIntoConstraints = NO;

如果未将其设置为NO,则iOS会将弹簧和支柱(例如自动调整大小遮罩)设置转换为约束。这些约束与您使用可视格式语言进行的约束相冲突。

任何时候你在constaints错误输出中看到类'NSAutoresizingMaskLayoutConstraint',那么你可以确定你没有关闭翻译。

良好的做法是,在您以编程方式创建的每个视图中,您也可以进行翻译。