NSLayoutConstraint错误:制作完整子视图



我正在创建全帧子视图,(subview's frame = superview's bound)

我做了如下展开

[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在调试器中捕获这个。

你能解释一下我错过了什么吗?

看来你没有打开你手工创建的视图的'translatesAutoresizingMaskInotConstraints'功能。

someView.translatesAutoresizingMaskIntoConstraints = NO;

如果你不将其设置为NO,那么iOS会将spring -and-struts(例如自动调整遮罩大小)设置转换为约束。这些约束与您使用视觉格式语言所做的约束相冲突。

当你在约束错误输出中看到类'NSAutoresizingMaskLayoutConstraint'时,你可以确定你没有关闭翻译。

最好的做法是,在你以编程方式创建的每个视图上,你也要转换。

最新更新