¿Restricción de layout automático con variable dinámica?

¿Es posible tener una restricción Auto Layout ( NSLayoutConstraint ) con una constante / multiplicador dinámica?

Por ejemplo, esto sería un pantano estándar NSLayoutConstraint :

 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; 

Entonces aquí habría una alteración de esa restricción, pero una variable dinámica en la constante:

 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:scrollView.contentOffset.x]; 

El segundo tomaría el contentOffset de la scrollview de scrollview y lo usaría como la constante. Sin embargo, habiendo intentado esto, solo usa el desplazamiento que existe cuando se realiza la restricción.

Lo que quisiera que tuviera la restricción actualizar la constante, cuando la scrollview si se desplaza. De esta forma, seguiría usando el contenido más actualizado.

es posible? Gracias.

Sí definitivamente.

De hecho, eso es para lo que están diseñados. Cuando está animando vistas, etc., debe poder cambiar las restricciones.

Contraintuitivamente, la única propiedad de NSLayoutConstraint que es escribible es la propiedad constant . (jajaja)

Sin embargo, no estás bien en tu código.

Al crear la restricción, primero crearías una propiedad para ello …

 @property (nonatomic, strong) NSLayoutConstraint *leftConstraint; 

Entonces créalo …

 self.leftConstraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; 

Luego edita la restricción ya existente …

 self.leftConstraint.constant = scrollView.contentOffset.x; 

Luego, debes forzar la vista para retransmitir las subvistas …

 [self.view layoutIfNeeded];