iOS8 Diseño automático pin progtwigdo en el margen de layout relativo

Tengo un elemento de interfaz de usuario ( UISwitch realidad, pero no importa realmente) que tiene tanto el espacio inicial como el posterior conectados a Superview en Interface Builder. La restricción se ve así en Xcode 6:

Pin de restricción

La restricción para liderar el espacio es igual de efectiva. El valor de la restricción es de 42.0 puntos .

Esto es exactamente lo que quiero, porque para diferentes dispositivos puedo cambiar la propiedad UIView en UIView y las restricciones funcionarán correctamente, para boost el margen entre las vistas.

Ahora quiero agregar otra vista en el código que también tenga espacio tanto inicial como posterior fijado a su margen de supervisión, por lo que funcionará el mismo layoutMargins establecido en Superview.

Fijé la vista usando el lenguaje de formatting visual con la siguiente syntax:

 NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-42.0-[separatorView]-42.0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.contentView, separatorView)]; [self.contentView addConstraints:constraints]; [self.contentView setNeedsUpdateConstraints]; 

Esto funciona, pero la propiedad layoutMargins no tiene ningún efecto con esta restricción, por lo que obviamente no está fijada al margen, sino directamente a Superview.

Entonces mi pregunta es:

¿Cómo pinchar los espacios del elemento UI al margen en el código usando el lenguaje de formatting visual? O si no es posible, cómo constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: con constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: API?

¡Gracias!

En iOS8, el lenguaje de formatting visual se ha actualizado para que "| -" o "- |" utilizará por defecto un espacio definido por la propiedad layoutMargins de la supervisión.

Entonces la respuesta usando el lenguaje de formatting visual es la siguiente:

 // programmatically set the layoutMargins, only if // you want non-default values and they are not already set in IB! self.contentView.layoutMargins = UIEdgeInsetsMake(0,42,0,42); // set left and right margins to 42 // assume: seperatorView is already a subview of self.contentView // separatorView will use the constraints because we write "-" between it and the superview edge NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[separatorView]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(separatorView)]; [self.contentView addConstraints:constraints]; 

Si desea consultar los márgenes de layout al crear las restricciones a través de la API directa, utilice los nuevos attributes de layout solo de iOS8:

 NSMutableArray * constraints = [NSMutableArray array]; [constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeftMargin relatedBy:NSLayoutRelationEqual toItem:separatorView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]]; [constraints addObject:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeRightMargin relatedBy:NSLayoutRelationEqual toItem:separatorView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; [self.contentView addConstraints:constraints]; 

Estoy de acuerdo: "En iOS8, el lenguaje de formatting visual se ha actualizado para que" | – "o" – | "utilice de forma pnetworkingeterminada un espaciado definido por la propiedad layoutMargins de la supervisión."

Por lo tanto, debe marcar la opción "Constrains to margin" cuando utiliza el generador de interfaces para ayudar a su layout. Si es así, entonces funciona.

Si el problema aún no se resolvió, ¿podría darme un proyecto de demostración?

Añadido: su artículo que nos muestra la function de la nueva ios8 API preservesSuperviewLayoutMargins, deseamos que sea más útil.