0

オブジェクトに制約を追加する方法を試すためだけに、簡単な実験を試みています。したがって、次のように、ストーリーボードから垂直方向のスペース制約 = 200 で単一の UIView (黄色) を作成します。

ここに画像の説明を入力

ここに私のインターフェースファイルがあります:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *screenView;
@property (strong, nonatomic) IBOutlet UIView *container;

@end

_containerそして、このコードを myに置くことで、 の Vertical Space Constraint をプログラムで変更したいと思います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があります ここに画像の説明を入力

4

1 に答える 1

2

問題は、_screenView が _containerView のスーパービューであるため、_containerView ではなく、制約を追加する必要があることです。また、「このコードをviewDidLoadに配置して、_containerの垂直スペース制約をプログラムで変更したい」と言いますが、あなたがしているのは、あなたが持っているものを変更するのではなく、まったく異なる制約(幅の制約)を追加することです。垂直方向の間隔の制約を変更する場合は、IBOutlet を作成し、コードでその定数値を変更できます。

于 2013-09-18T23:11:46.633 に答える