Qué es “Limitar al margen” en Storyboard en Xcode 6

Estoy trabajando con autolayout y restricciones y encontré que hay una opción Restringir Constrain to margins en XCode 6 que no estaba presente en XCode 5 y está marcada por defecto.

UITableView un proyecto de prueba y luego agregué un UITableView en un ViewController con el marco establecido en el mismo tamaño que la vista y las restricciones añadidas

XCode 6 Puede ver aquí incluso si tableview tiene el mismo marco que la vista XCode sugiere agregar -16 como restricción mientras que XCode 5 sugeriría agregar espaciado 0.

Con Restringir a margen verificado

Ahora cuando desmarcas la opción “Restringir al margen” se comporta igual que XCode 5 y sugeriría agregar 0 como restricción

Con Restringir al margen no controlado

Además, descubrí que una vez que agregué la restricción con Restringir al margen marcado, ya no puedo abrir el archivo del guión gráfico en XCode 5, por lo que definitivamente es algo nuevo en XCode 6

Con suerte, puedo explicar mi pregunta correctamente. Me gustaría entender qué hace realmente “Restringir al margen” y cuándo debería y no debería usarlo. Me disculpo si es algo muy simple y obvio.

EDITAR

Encontré algo sobre los márgenes de diseño en discusión aquí , me pregunto si está relacionado con esto.

No entiendo en absoluto por qué las personas se quejan de que “los márgenes causarían un locking rotundo en cualquier cosa anterior a iOS 8 “.

Establecer sus restricciones relativas al margen en un archivo xib o storyboard NO hace que su aplicación se bloquee en iOS7, y tampoco hace una diferencia de UI en su dispositivo iOS7, siempre y cuando no toque UIView.layoutMargins y UIView.preservesSuperviewLayoutMargins propiedades de SupervisiónLayoutMargins en su código.

¿Qué es Margins en iOS8?

Los márgenes de diseño representan un relleno alrededor del interior de una UIView que el sistema de disposición puede usar al diseñar subvistas, para garantizar que quede un espacio entre el borde de una vista y una subvista. En este sentido, es muy parecido a la propiedad de relleno asociada con bloques en CSS.

enter image description here

Por defecto, una UIView tiene márgenes de diseño de 8 puntos en cada lado, y esto no se puede cambiar en el Interface Builder . Sin embargo, al establecer la propiedad UIView.layoutMargins en el código, que solo está disponible en iOS8, puede ajustar estos valores.

Puede hacer que IB muestre los márgenes con Editor> Lienzo> Mostrar rectangularjs de diseño: enter image description here

Los márgenes se pueden usar para ayudar a diseñar sus vistas y subvistas. Cada UIView viene con los márgenes por defecto, pero solo afectan la ubicación de la vista cuando configura una restricción que está relacionada con un margen.

Cómo usar los márgenes

La única forma de usar márgenes en Interface Builder es verificar la opción Relative to margin mientras configura sus restricciones. Esta es la forma en que dirige su restricción a Usar márgenes en lugar de bordes al diseñar mi vista.

enter image description here

Echemos un vistazo a cuatro formas diferentes de establecer una restricción principal entre una vista y su subvista. Para cada restricción revisamos que la primera asociación descrita será la que encabeza la subvista , y la segunda será la que encabeza la supervista . Lo que desea prestar mucha atención es comprobar y desmarcar el estado de la opción relativa al margen de cada límite de restricción, porque eso define si la restricción está vinculada al margen o al borde de la vista.

  1. Primer elemento (desmarcar), segundo elemento (verificar): en este caso, estamos declarando que el borde izquierdo de la subvista debe alinearse con el margen izquierdo de la supervista (como se muestra en esta imagen).

enter image description here

  1. Primer elemento (desmarcar), segundo elemento (desmarcar): ambos usan borde, no margen . En este caso, estamos declarando que el borde izquierdo de la subvista debe alinearse con el borde izquierdo de la supervista.

enter image description here

  1. Primer elemento (verificar), segundo elemento (desmarcar): en este caso, estamos declarando que el margen izquierdo de la subvista debe alinearse con el borde izquierdo de la supervista. Este tipo de diseño realmente hace que la subvista se superponga a la supervista.

enter image description here

  1. Primer artículo (verificar), segundo artículo (verificar). Esto en realidad tiene el mismo efecto que en el caso 2, ya que tanto la subvista como la supervista tienen el mismo margen predeterminado. Estamos declarando que el margen izquierdo de la subvista debe alinearse con el margen izquierdo de la supervista.

enter image description here

Lo bueno de los márgenes

Esta nueva característica (iOS8) solo afecta el desarrollo de la interfaz de usuario si decide usar los márgenes.

Al usar los márgenes, puede ajustar la ubicación de múltiples subvistas que comparten una relación común con una supervista compartida cambiando el valor de una sola propiedad. Esta es una clara victoria sobre la configuración de todas las restricciones asociadas con valores fijos, porque si necesita actualizar todo el espaciado, en lugar de cambiar cada valor uno por uno, puede modificar simultáneamente todas las ubicaciones relevantes actualizando el margen de la supervista con una sola línea de código como este:

 self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0); 

Para ilustrar este beneficio, en el siguiente caso todos los bordes izquierdos de las subvistas están alineados con el margen izquierdo de su supervista. Por lo tanto, el cambio del margen izquierdo de la supervista afectará todas las subvistas al mismo tiempo.

enter image description here

En iOS 8 ahora tiene la opción de definir sus restricciones en relación con un margen predefinido a los límites de la supervista, en lugar de los límites de la supervista. Sí, está totalmente relacionado con los márgenes de diseño que señaló en los documentos. Una ventaja es que puede redefinir sus márgenes de forma dinámica o diferente para cada tipo de dispositivo, y el diseño se actualizará de forma correspondiente sin modificar las restricciones.

Cuándo usarlo: cuando quiera aprovechar esta nueva flexibilidad.

Cuándo NO usarlo: para cualquier aplicación destinada a ejecutarse en iOS 7 o inferior.

La propiedad en UIView es: layoutMargins . Ver los documentos de Apple . Básicamente, si los márgenes de disposición son 8,8,8,8 (el valor predeterminado), una restricción con 0 espacios al margen del contenedor tendrá una posición x de 8. Tenga en cuenta que esto solo está disponible en iOS8 o posterior.

Para todos los que no desean que sus restricciones vayan al margen del contenedor:

CTRL + clic + arrastrar para mostrar la ventana emergente de creación de restricciones.

Si el menú muestra para crear la restricción al margen de forma predeterminada, mantenga presionada la opción / alt para permitir que la restricción se realice en el contenedor y no en el margen del contenedor.

Ahora mostrará la opción de crear la restricción NOT en el margen. Esto es MUCHO más rápido en mi uso.