iOS NSLayoutConstraint Ancho fijo usando constraintWithItem

Me gustaría establecer una restricción para darle a un UIB un ancho fijo (constante) programáticamente. Sé que puedo hacer esto con constraintsWithVisualFormat, pero he estado usando constraintWithItem para todas mis restricciones en el código. Me preguntaba por curiosidad / coinheritance si hubiera alguna manera de hacer esto con constraintWithItem.

Encontré mi solución. Simplemente establezca el otro object en nil y el otro atributo en NSLayoutAttributeNotAnAttribute (esto es lo que no conseguí pensar) y use el parámetro constante para el ancho fijo:

[self addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:200]]; 

Editar: dado que esta respuesta aún parece tener una buena cantidad de puntos de vista, pensé que agregaría la syntax Swift:

 self.addConstraint(NSLayoutConstraint( item: myButton, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 200)) 

Aquí hay un código simple para el button con ancho fijo.

formatting visual:

 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H: [myButton(==50)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myButton)]]; 

Use este código para la restricción utilizando el formatting visual donde self.view es la vista de supervisión de su button y myButton es el nombre de su button y 50 es el ancho de myButton. Puede cambiar estos valores según obtenga la restricción deseada.

formatting constraintWithItem:

 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute: NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:50.0]]; 

Utilice este código para la restricción utilizando el formatting constraintWithItem donde self.view es la vista de supervisión de su button y myButton es el nombre de su button y 50 es el ancho de myButton. Puede cambiar estos valores según obtenga la restricción deseada.

En swift:

 let width = 120 let constraint = NSLayoutConstraint( item: myView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: width) NSLayoutConstraint.activateConstraints([constraint]) 

Entonces puedes cambiar el valor constante de la restricción

 constraint.constant = width * 2 

¿Qué hay de usar los anclajes de layout ?

 myView.widthAnchor.constraintEqualToConstant(29).active = true