¿Es posible anular selectivamente las restricciones de layout en Interface Builder?

Estoy intentando ajustar el tamaño de un UIImageView dependiendo de si el dispositivo es un iPhone 5 (pantalla alta) o una versión anterior de iPhone (pantalla más corta). A continuación está mi código. Sin embargo, cuando ejecuto la aplicación, se ignoran estas instrucciones. Sospecho que el problema está causado por las restricciones de layout automático. Si desactivo esas restricciones, la image se cambia de tamaño, pero eso arruina el rest de mi layout. ¿Hay alguna forma de anular selectivamente el layout automático en lugar de apagarlo?

CGRect screenBounds = [[UIScreen mainScreen] bounds]; if (screenBounds.size.height == 568) { // code for 4-inch screen avatarImage.frame = CGRectMake(43, 372, 75, 75); } else { // code for 3.5-inch screen avatarImage.frame = CGRectMake(43, 372, 50, 50); } 

EDITAR

A continuación se muestra una image del problema que trato de resolver. Quiero que la image del avatar cambie de tamaño proporcionalmente hasta que encaje en la vista más pequeña. Y quiero mover el campo de text hacia arriba y hacia la derecha de la label mediante progtwigción.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Una forma de hacerlo sería modificar sus limitaciones mediante progtwigción. Puedes hacer esto por:

  1. Cree restricciones de altura y anchura para su vista de image seleccionando la vista de image y luego en Xcode 5, haciendo clic en metro button:

    introduzca la descripción de la imagen aquí

    O bien, en las versiones anteriores de Xcode, haciendo clic en centrar button:

    crear restricciones

  2. Asegúrate de cambiar el otro trabajo secundario, las restricciones permiten cambiar el tamaño de la image. Por ejemplo, si tiene una label a la derecha de esta image en miniatura, desea asegurarse de que esté configurada para que el ancho de la label se ajuste a medida que cambia el tamaño de la image. En pocas palabras, quiere asegurarse de que no tiene conflictos de restricciones cuando la aplicación se ejecuta, porque si tiene algunos conflictos, puede get un post de debugging sobre tener que romper una restricción para hacer que la aplicación funcione o, lo que es peor, que las restricciones no son satisfactorias.

  3. Cree references IBOutlet para sus nuevas restricciones de altura y ancho. La forma más fácil es mostrar el editor asistente (para que sus files .h asociados aparezcan mientras manipula su storyboard) y luego controlar -drag desde la restricción al file .h:

    crear IBOutlets

  4. Luego, en su código, puede modificar sus restricciones:

     CGRect screenBounds = [[UIScreen mainScreen] bounds]; if (screenBounds.size.height >= 568) { self.widthConstraint.constant = 75; self.heightConstraint.constant = 75; } else { self.widthConstraint.constant = 50; self.heightConstraint.constant = 50; } 

En este caso, diría que, en lugar de especificar una altura, probablemente desee restringir el espacio superior a la vista de supervisión y el espacio inferior a la supervisión. Cuando la altura de la supervisión supervisa, la altura de la subvista crecerá en consecuencia.

Mover la vista de text hacia arriba y hacia la derecha en lugar de estar debajo será más desafiante. Es posible que pueda lograr ese efecto con diferentes prioridades de restricción, pero es probable que termine enfurecido. Esto parece una situación no trivial para la que sería mejor actualizar las restricciones programáticamente en time de ejecución.

@Rob ha ofrecido un punto decente, que es que puede enchufar restricciones en IBOutlets y modificarlas o eliminarlas programáticamente después. Tal vez ese enfoque dará fruto también en este caso.