Establecer el ancho de la subvista Porportional to Superview's

Estoy tratando de establecer una restricción que se vería así (subvista en la vista de supervisión roja en blanco):

¿Cómo haría esto en el generador de interfaces (preferiblemente) y si no es posible, entonces código, pero qué debo poner como ancho para hacer feliz a IB?

He intentado seleccionar la subvista y la supervisión, pero no me permite establecer restricciones de esa manera.

Puedes hacerlo completamente en IB. No sé a qué te refieres con "He intentado seleccionar la subvista y la supervisión, pero no me permite establecer restricciones de esa manera"; eso, de hecho, es exactamente lo que debes hacer, y exactamente lo que te permitirá hacer, en resumen, esa es precisamente la forma en que haces una relación de ese tipo.

Describiré todo en tres etapas. Comience con su subvista y saque las restricciones iniciales para arriba, a la izquierda y a la derecha:

introduzca la descripción de la imagen aquí

Ahora select la vista y su vista de supervisión y use la window emergente en la parte inferior para establecer anchos iguales (por supuesto, cuando haya terminado, no serán iguales, pero esto es solo para formar la restricción en sí):

introduzca la descripción de la imagen aquí

Finalmente, arregle todos los valores de restricción seleccionando cada uno de ellos y editando su constante en el inspector de attributes. Todos los valores deben ser 0, excepto por la relación de ancho, por supuesto; allí, ingresará los dos valores que dio en su pregunta:

introduzca la descripción de la imagen aquí

Ahora ha terminado, pero si desea que las advertencias "desalineadas" desaparezcan, elija Actualizar todos los frameworks para que el layout tenga el mismo aspecto que en el time de ejecución. ¡O simplemente ejecutarlo y ver lo que tienes!

EDIT : En un .xib, no podrá formar la restricción width = width a la vista de nivel superior. Para evitar esto, use una "vista de contenedor" interviniente invisible para actuar como un búfer entre la vista de nivel superior y todo lo demás. Pin la vista de contenedor con valores cero en todos los lados a la vista de nivel superior; ahora la vista del contenedor actuará como el contenedor para todo lo demás, y podrá pinchar en términos de su ancho:

introduzca la descripción de la imagen aquí

He hecho algo similar donde quería una subvista para ser el 25% de la supervisión. La restricción se ve así:

NSLayoutConstraint *c = [NSLayoutConstraint constraintWithItem:viewA attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:viewA.superview attribute:NSLayoutAttributeWidth multiplier:.5 constant:(CGFloat)-20]; [viewA.superview addConstraint:c]; 

En cuanto a IB, puede simplemente establecer una restricción de ancho, luego editarla y marcar el cuadro "Eliminar marcador de position en time de construcción". Aquí hay un enlace a mi publicación de blog que lo describe mejor

Sin una vista de contenedor, puede hacerlo agregando la restricción final con Superview.CenterX

 subView.left = superView.left subView.right = superView.CenterX + 20