我正在创建全帧子视图,(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'时,你可以确定你没有关闭翻译。
最好的做法是,在你以编程方式创建的每个视图上,你也要转换。