IOS约束不起作用

时间:2015-01-06 20:46:20

标签: ios objective-c uiimageview nslayoutconstraint

我有一个工具栏,其中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类别中的方法也可能有所帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

您已创建了UIImageView,但尚未将该图像视图添加到界面中。您无法为不在界面中的视图添加约束。如果你这样做,你会,呃,崩溃。

此外,您忽略了将translatesAutoresizingMaskIntoConstraints设置为NO。如果你忽略了这一点,那么当你添加自己的约束时,你就会遇到约束冲突,你会崩溃。

真的,这只是在控制台中读取错误消息的问题。正如我的老式民间舞蹈老师曾经说过的那样,“音乐会告诉你该怎么做!”