Alternar una restricción bajo una cierta condición

Configuración: he diseñado un UIButton con una constraint inferior X, prioridad 999. Además de esta constraint el UIButton también tiene otra constraint Y, prioridad 1000, pero esta está marcada como installed = false .

Y se vincula a un @IBOutlet en mi UIViewController con una fuerte reference.

En viewDidLoad() : si una condición dada es verdadera, active la constraint Y haciendo Y.isActive = true , y luego view.layoutIfNeeded() , que finalmente llama a updateConstraints() si es necesario. Si la condición es falsa, no hago nada.

Mi expectativa: cuando la condición es verdadera, espero que la vista aplique la constraint Y al button y suelte X. Cuando la condición es falsa, espero que el UIButton solo tenga la constraint X.

El resultado: Parece que la constraint Y no se aplica en absoluto, incluso cuando se cumple la condición.

Agradecería cualquier comentario sobre esto, esto para mí parece algo que debería funcionar.

Gracias.

PS uso swift, pero no me importa si la respuesta provista está en Obj-C.

Parece que hay un error al usar IB, donde establecer la propiedad de una restricción como desinstalada no siempre funcionará correctamente como "inactivo", sino que más tarde creará problemas al activar / desactivar la restricción dada.

Como solución alternativa, marque siempre las restricciones como instaladas, pero para aquellas restricciones que deben estar inactivas en la carga, vaya al atributo de inspector de identidad / attributes de time de ejecución definido por el usuario y agregue 'activo' como un set boolean a falso (no marcado)

Encontramos la solución aquí: https://stackoverflow.com/a/33079428/691868