El diseño parece un poco no especificado. ¿Cuándo view2 comienza a reducirse en lugar de coincidir con el tamaño de view1? Supongo que las vistas deben tener el mismo tamaño hasta que view1 alcance un mínimo. En ese punto, view2 cambia el tamaño hasta que alcanza su mínimo, y luego view1 cambia de tamaño hasta que alcanza su mínimo.
Podemos tener este comportamiento agregando prioridades a las restricciones. En orden de importancia tenemos:
- Vista1 y View2> = mínimo
- Vista1> = view1SoftMinimum
- Vista1 == View2
contraint 1 debe estar por encima de la prioridad ventana de cambio de tamaño. Podemos hacerlo obligatorio (que es el predeterminado).
Restricción 2 debe estar por encima de contraint 3, pero debajo de NSLayoutPriorityDragThatCannotResizeWindow. Lo haremos 480.
contraint 3 debe estar por debajo de contraint 2, por lo que lo hacemos 479.
podemos expresar todas esas contraints en una cadena de formato visual, que puede agregar
|[view1(>=view1Minimum,>[email protected],[email protected])][view2(>=view2Minimum)]|
Aquí está el código que probé con:
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]];