试图添加简单的约束,但得到了这个错误信息

我正在尝试简单的实验,试图如何将约束添加到对象中。 所以,我创build了一个单一的UIView(黄色)的垂直空间约束= 200从故事板这样的:

在这里输入图像说明

这是我的接口文件:

#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (strong, nonatomic) IBOutlet UIView *screenView; @property (strong, nonatomic) IBOutlet UIView *container; @end 

我想通过在我的viewDidLoad代码来编程修改_container的垂直空间约束:

 NSLayoutConstraint *myConstraint =[NSLayoutConstraint constraintWithItem:_screenView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:_container attribute:NSLayoutAttributeWidth multiplier:5 constant:15]; [_container addConstraint: myConstraint]; 

但是当我运行它到模拟器,我得到这个错误消息:

 > 2013-09-19 05:48:26.488 container[6036:c07] *** Terminating app due to > uncaught exception 'NSGenericException', reason: 'Unable to install > constraint on view. Does the constraint reference something from > outside the subtree of the view? That's illegal. > constraint:<NSLayoutConstraint:0x7168860 UIView:0x7168b50.width == > 5*UIView:0x7169360.width + 15> view:<UIView: 0x7169360; frame = (0 0; > 0 0); autoresize = TM+BM; layer = <CALayer: 0x7168bb0>>' 

我做错了什么? 谢谢…

更新:这是我的意思是_container 在这里输入图像说明

这里是_screenView 在这里输入图像说明

你的问题是_screenView是_containerView的superview,所以你的约束应该被添加到它,而不是_containerView。 另外,你说:“我想通过在我的viewDidLoad上加上这段代码来以编程方式修改_container的垂直空间约束”,但是你要做的是添加一个完全不同的约束(一个宽度约束)而不是修改你所拥有的约束。 如果要修改垂直间距约束,则可以为其创build一个IBOutlet,并在代码中修改它的常量值。