レイアウトが少し不明なようです。 view2はいつview1のサイズにマッチするのではなく収縮し始めますか?私はview1が柔らかい最小値に達するまでビューが同じサイズでなければならないと仮定しています。その時点で、最小値に達するまでview2がサイズ変更され、最小値に達するまでview1がサイズ変更されます。
制約に優先度を追加することで、この動作を実現できます。重要性のために我々は:
- VIEW1とVIEW2> =最小
- VIEW1> = view1SoftMinimum
- VIEW1 == VIEW2
をContraint 1は、ウィンドウのサイズ変更の優先度以上でなければなりません。私たちはそれを必要にすることができます(これがデフォルトです)。
制約2は制約3よりも上でなければなりませんが、NSLayoutPriorityDragThatCannotResizeWindowより下でなければなりません。私たちは、それが480
Contraint 3はcontraint 2以下でなければならないようになりますので、我々は我々はあなたが
|[view1(>=view1Minimum,>[email protected],[email protected])][view2(>=view2Minimum)]|
を追加することができ、1つの視覚的なフォーマット文字列でそれらのcontraintsのすべてを表現することができ、それ479
作ります
次のコードでテストしました。
NSView *view1 = [[NSTextView alloc] initWithFrame:NSZeroRect];
NSView *view2 = [[NSTextView alloc] initWithFrame:NSZeroRect];
[view1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[view2 setTranslatesAutoresizingMaskIntoConstraints:NO];
NSView *contentView = [self.window contentView];
[contentView addSubview:view1];
[contentView addSubview:view2];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view1, view2);
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view1]|" options:NSLayoutConstraintOrientationVertical metrics:NULL views:viewsDictionary]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view2]|" options:NSLayoutConstraintOrientationVertical metrics:NULL views:viewsDictionary]];
NSDictionary *metrics = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:300], @"view1SoftMinimum",
[NSNumber numberWithFloat:150], @"view1Minimum",
[NSNumber numberWithFloat:150], @"view2Minimum", nil];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view1(>=view1Minimum,>[email protected],[email protected])]-[view2(>=view2Minimum)]|" options:0 metrics:metrics views:viewsDictionary]];