我正在制作全帧子视图,(子视图的帧=超级视图的界限)
我按照以下方式进行了扩展
[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上中断以在调试器中捕获它。
你能解释一下我错过的吗?
答案 0 :(得分:1)
您似乎没有转变手工创建的视图的“translatesAutoresizingMaskInotConstraints”功能。
someView.translatesAutoresizingMaskIntoConstraints = NO;
如果未将其设置为NO,则iOS会将弹簧和支柱(例如自动调整大小遮罩)设置转换为约束。这些约束与您使用可视格式语言进行的约束相冲突。
任何时候你在constaints错误输出中看到类'NSAutoresizingMaskLayoutConstraint',那么你可以确定你没有关闭翻译。
良好的做法是,在您以编程方式创建的每个视图中,您也可以进行翻译。