我有一个工具栏,其中UIImageView
我以编程方式添加。当我尝试将NSConstraint
添加到UIImageView
以将其置于工具栏视图中心时。当我在模拟器上运行它时,它崩溃了。
这是我的代码:
UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,
nav.frame.size.width, nav.frame.size.height)];
image.image = [UIImage imageNamed:[imageTop objectAtIndex:2]];
[imageToolbar addSubview:image];
[imageToolbar addConstraint:[NSLayoutConstraint constraintWithItem:image
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:imageToolbar
attribute:NSLayoutAttributeCenterX
multiplier:1.0 constant:0]];
[imageToolbar addConstraint:[NSLayoutConstraint constraintWithItem:image
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:imageToolbar
attribute:NSLayoutAttributeCenterY
multiplier:1.0 constant:0]];
错误:
无法同时满足约束条件。
以下列表中的至少一个约束可能是您不想要的约束。试试这个:
(1)查看每个约束并尝试找出你不期望的;
(2)找到添加了不需要的约束或约束并修复它的代码。 (注意:如果您看到NSAutoresizingMaskLayoutConstraints
不明白,请参阅UIView
属性translatesAutoresizingMaskIntoConstraints
的文档
(
"<NSLayoutConstraint:0x7fcfc2536f50 UIImageView:0x7fcfc2536d50.centerX == UIToolbar:0x7fcfc2525610.centerX>",
"<NSLayoutConstraint:0x7fcfc252dad0 UIView:0x7fcfc252c750.trailingMargin == UIToolbar:0x7fcfc2525610.trailing - 16>",
"<NSLayoutConstraint:0x7fcfc252db20 UIToolbar:0x7fcfc2525610.leading == UIView:0x7fcfc252c750.leadingMargin - 16>",
"<NSAutoresizingMaskLayoutConstraint:0x7fcfc254fea0 h=--& v=--& UIImageView:0x7fcfc2536d50.midX == + 160>",
"<NSLayoutConstraint:0x7fcfc2551110 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7fcfc252c750(375)]>"
)
将尝试通过违反约束来恢复
<NSLayoutConstraint:0x7fcfc2536f50 UIImageView:0x7fcfc2536d50.centerX == UIToolbar:0x7fcfc2525610.centerX>
在UIViewAlertForUnsatisfiableConstraints
处创建一个符号断点,以便在调试器中捕获它。
UIView中列出的UIVonstraintBasedLayoutDebugging类别中的方法也可能有所帮助。
感谢。
答案 0 :(得分:0)
您已创建了UIImageView,但尚未将该图像视图添加到界面中。您无法为不在界面中的视图添加约束。如果你这样做,你会,呃,崩溃。
此外,您忽略了将translatesAutoresizingMaskIntoConstraints
设置为NO。如果你忽略了这一点,那么当你添加自己的约束时,你就会遇到约束冲突,你会崩溃。
真的,这只是在控制台中读取错误消息的问题。正如我的老式民间舞蹈老师曾经说过的那样,“音乐会告诉你该怎么做!”