1

2 つのビューの幅が画面いっぱいになるように制約を設定しようとしています。1 つのビューの幅を変更すると、それに応じて他のビューも変更されます。

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1]-8-[view2]-8-|" options:0 metrics:nil views:views]];

これはかなり単純だと思いますが、コードは のサイズを無視しているようですview2view1は画面の幅全体を取得し続け、 のフレームを設定してview2も の幅には影響しませんview1

私は何が欠けていますか?

4

1 に答える 1

2

最小サイズの制約も割り当てview2ます。そうしないと、「幅 0」が制約の有効な解決策になります。

[NSLayoutConstraint activateConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1(>=minSize)]-8-[view2(>=minSize)]-8-|" 
                                            options:0 
                                            metrics:@{@"minSize" : @50} 
                                              views:views]];

また、addConstraints:もう使用しないでください (iOS 8 以降)。-[NSLayoutConstraint setActive:]または_+[NSLayoutConstraint activateConstraints:]

のサイズの変更に関してview2は、自動レイアウトを使用している場合、ビューのフレームを直接設定することはできません。値は次のレイアウト パスで上書きされます。ビューの明示的な幅の制約を作成する必要があります。

[NSLayoutConstraint constraintWithItem:view2
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                                toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                            multiplier:1.0
                              constant:120];

ビューのサイズを変更する必要がある場合は、その制約の定数を調整します。

于 2015-11-26T06:16:26.587 に答える