佈局似乎有點不明確。什麼時候view2開始縮小而不是匹配view1的大小?我認爲在view1達到最低限度之前視圖應該是相同的大小。此時,view2會調整大小,直到達到最小值,然後調整view1大小,直到達到最小值。
我們可以通過向約束添加優先級來實現這種行爲。按重要性的順序,我們有:
- 廠景和視圖2> =最小
- 廠景> = view1SoftMinimum
- 廠景==視圖2
Contraint 1必須在窗口調整大小優先上方。我們可以使它成爲必需的(這是默認的)。
約束2必須高於約束3,但低於NSLayoutPriorityDragThatCannotResizeWindow。我們將使它480
Contraint 3必須低於contraint 2,所以我們將其479
我們可以表達所有這些約束上的一個視覺格式字符串,您可以添加
|[view1(>=view1Minimum,>[email protected],[email protected])][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,>[email protected],[email protected])]-[view2(>=view2Minimum)]|" options:0 metrics:metrics views:viewsDictionary]];