我正在尝试简单的实验,试着如何在对象中添加约束。所以,我在故事板上创建了一个单独的UIView(黄色),垂直空间约束= 200,如下所示:
这是我的界面文件:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *screenView;
@property (strong, nonatomic) IBOutlet UIView *container;
@end
我希望通过在我的_container
上使用此代码以编程方式修改viewDidLoad
的垂直空间约束:
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
答案 0 :(得分:2)
您的问题是_screenView是_containerView的超级视图,因此应该将约束添加到它,而不是_containerView。另外,你说,“我希望通过在我的viewDidLoad上使用此代码以编程方式修改_container的垂直空间约束”,但你所做的是添加一个完全不同的约束(宽度约束)而不是修改你拥有的约束。如果要修改垂直间距约束,可以为其创建一个IBOutlet,并在代码中修改它的常量值。