Dmi*_*try 7 cocoa autolayout nslayoutconstraint
我在Cocoa玩Autolayout,有些事情对我来说并不清楚.
我在一个窗口上有2个视图.每个视图的宽度是父窗口的1/2宽度.
| | |
| | |
| View1 | View2 |
| | |
| | |
Run Code Online (Sandbox Code Playgroud)
如果我调整窗口大小,我希望View2首先调整大小.
| | |
| | |
| View1 |View2|
| | |
| | |
Run Code Online (Sandbox Code Playgroud)
当View2达到其最小尺寸时,我希望将View1调整为其最小尺寸.
| | |
| | |
|View1|View2|
| | |
| | |
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Bri*_*ell 16
布局似乎有点不明确.view2什么时候开始缩小而不是匹配view1的大小?我假设视图应该是相同的大小,直到view1达到软最小值.此时,view2会调整大小,直到达到最小值,然后view1会调整大小,直到达到最小值.
我们可以通过向约束添加优先级来实现此行为.按重要性排序,我们有:
Contraint 1必须高于窗口大小调整优先级.我们可以使它成为必需的(这是默认值).
约束2必须高于约束3,但低于NSLayoutPriorityDragThatCannotResizeWindow.我们将成为480.
Contraint 3必须低于束缚2,所以我们将其设为479.
我们可以在一个可视化格式字符串中表达所有这些约束,您可以添加它
|[view1(>=view1Minimum,>=view1SoftMinimum@480,==view2@479)][view2(>=view2Minimum)]|
Run Code Online (Sandbox Code Playgroud)
这是我测试过的代码:
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]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |