布局似乎有点不确定。view2 什么时候开始缩小而不是匹配 view1 的大小?我假设视图应该是相同的大小,直到 view1 达到最低限度。此时,view2 调整大小直到达到最小值,然后 view1 调整大小直到达到最小值。
我们可以通过向约束添加优先级来实现这种行为。按重要性排序,我们有:
- view1 和 view2 >= 最小值
- view1 >= view1SoftMinimum
- 视图1 == 视图2
约束 1 必须高于窗口大小调整优先级。我们可以将其设为必需(这是默认设置)。
约束 2 必须高于约束 3,但低于 NSLayoutPriorityDragThatCannotResizeWindow。我们将其设为 480。
约束 3 必须低于约束 2,因此我们将其设为 479。
我们可以用一个可视格式字符串表达所有这些约束,您可以添加
|[view1(>=view1Minimum,>=view1SoftMinimum@480,==view2@479)][view2(>=view2Minimum)]|
这是我测试的代码:
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,>=view1SoftMinimum@480,==view2@479)]-[view2(>=view2Minimum)]|" options:0 metrics:metrics views:viewsDictionary]];