13

ビュー内にビューがあります:

+--------------+
|              |
|       +-----+|
|       |     ||
|       +-----+|
+--------------+

内側のビューを常に外側のビューの真ん中から水平方向に開始し、残りの半分全体を右端まで広げたいと思います。

innerView.frame.size.width = outerView.frame.size.width/2;
innerView.frame.origin.x = outerView.frame.size.width/2;

自動レイアウトを使用してそれをどのように表現できますか?

4

3 に答える 3

7

Interface Builder でこれを行うことはできないと思いますが、コードで制約を作成することで非常に簡単に行うことができます。

あなたの最初の方程式は、まさに私が制約を表現する方法です。2 番目の式は機能するかもしれませんが、原点を幅に関連付けるのは奇妙です。それらは異なる量です。代わりに、innerView の右側を outerView の右側に固定します。

NSLayoutAttributeTrailingの代わりに属性を使用するNSLayoutAttributeRightため、RTL をローカライズするとインターフェイスが適切に反転します。

// innerView.width = outerView.width * 0.5
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:innerView
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                                toItem:outerView
                             attribute:NSLayoutAttributeWidth
                            multiplier:0.5
                              constant:0];

// innerView.trailing = outerView.trailing
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:innerView
                             attribute:NSLayoutAttributeTrailing
                             relatedBy:NSLayoutRelationEqual
                                toItem:outerView
                             attribute:NSLayoutAttributeTrailing
                            multiplier:1.0
                              constant:0];

[outerView addConstraints:@[widthConstraint, rightConstraint]];
于 2013-01-08T16:22:14.703 に答える
0

親ビューの中央に配置し、Interface Builder ですべての自動レイアウト設定を削除できます。回転させると、常に同じ位置のイベントになります。

于 2013-01-08T09:19:39.897 に答える