を使用してビューをサブビューとして追加しています[self.view addSubview:myView]
。これはポートレートモードでうまく機能します。ただし、風景ではまったく機能しません。プログラムでレイアウト制約を追加するにはどうすればよいですか?
私のビューは現在、縦長の長方形のように見えますが、横長モードでは横長の長方形のように見える必要があります。
このコードを試して、コード内の制約がどのように機能するかを確認しましたが、常に例外が発生します。コードは次のとおりです。
[self.view addSubview:_preView];
NSLayoutConstraint *myConstraint = [NSLayoutConstraint
constraintWithItem:_preView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view.superview
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-239];
[_preView addConstraint:myConstraint];
これにより、常に例外が発生します。上記のコードは、プレビューの下部がメイン ビューの下部より 239 ピクセル上にあることを確認するだけであることを知っています。しかし、それもうまくいきません。
ランドスケープの問題を解決できるように、これをソートするのを手伝ってもらえますか?
アップデート
生成される例外は次のとおりです。
2013-08-05 16:13:28.889 Sample Code[33553: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:0x912c430 UIView:0x8561340.bottom == UILayoutContainerView:0x8257340.bottom - 20> view:<UIView: 0x85774e0; frame = (0 0; 320 568); opaque = NO; autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x8577490>>'
*** First throw call stack:
(0x1a04012 0x173be7e 0x1a03deb 0x12ee4a0 0xbb983e 0xbb9a27 0xbb9b76 0xbb9d3b 0xbb9c4d 0x1c0d9 0x11395b3 0x19c3376 0x19c2e06 0x19aaa82 0x19a9f44 0x19a9e1b 0x24027e3 0x2402668 0x67fffc 0x2d3d 0x2c65)
libc++abi.dylib: terminate called throwing an exception
(lldb)
制約を追加する前にサブビューを追加したので、ビューが階層にあると確信しています。
更新 2
IB で親ビューのプロパティを「サブビューの自動サイズ変更」に設定しました。サブビューは、デバイスを回転させたときに横長の長方形に変換されるようになりましたが、狭すぎます。正しい幅であることを確認するためのコードが必要ですか?