3

iOS6 では、オートレイアウトを使用しています。

  • プログラムで作成された 2 つのビュー v1 と v2 があります。
  • v2 はサブビューとして v1 に追加されます
  • v1 の制約は、プログラムによって既に作成されています (ここには示されていません)。
  • v1 と v2 を同じサイズにし、v2 を v1 の上に配置して、v2 が v1 の上に正確に重なるように、水平方向と垂直方向の中心が一致するようにします。

質問:

  • どうすればこれを達成できますか (できれば視覚的な形式を使用してください。それが不可能な場合は、別のアプローチを提案できます)?

コード- 以下は私の試みですが、目的の出力が得られません。- エラーはスローされません。V1 は正しく配置されていますが、V2 は V1 の左隅にあります

注 - 以下のコメントで、私がやろうとしていることを説明しました。

[v1 addSubView:v2];

v1.translatesAutoresizingMaskIntoConstraints        = NO;
v2.translatesAutoresizingMaskIntoConstraints        = NO;

NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(v1,
                                                              v2);

//I wanted v1 and v2 to be of the same height and wanted the center Y to be aligned together
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[v2(==v1)]"
                                                                         options:NSLayoutFormatAlignAllCenterY
                                                                         metrics:nil
                                                                           views:viewDictionary];


//I wanted v1 and v2 to be of the same height and wanted the center X to be aligned together
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[v2(==v1)]"
                                                                       options:NSLayoutFormatAlignAllCenterX
                                                                       metrics:nil
                                                                         views:viewDictionary];

[v1 addConstraints:horizontalConstraints];
[v1 addConstraints:verticalConstraints];
4

1 に答える 1

2

これだけでいいのではないですか?

NSMutableArray *constraints = [NSMutableArray new];

constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|[v2]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:NSDictionaryOfVariableBindings(v2)];
constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[v2]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:NSDictionaryOfVariableBindings(v2)];
[v1 addConstraints:constraints];

これにより、v2 の高さと幅がそのスーパービューのサイズに引き伸ばされます。この場合は v1 であり、スーパービューの真上にも配置されます。

あなたの場合、ビューのcenterXとcenterYを揃える必要はないようです。そうでなければ、あなたの質問の文脈を正しく理解していません。

于 2012-10-10T02:32:19.523 に答える