No entiendo en absoluto por qué la gente se queja de que "los márgenes causarían un colapso total en cualquier cosa antes de iOS 8 ".
El establecimiento de sus limitaciones relativas a los márgenes en un archivo de guión gráfico o xib NO hacer su aplicación en accidente iOS7, y que NO hacer una diferencia en su dispositivo de interfaz de usuario ni iOS7, siempre y cuando no se toca el UIView.layoutMargins
y UIView.preservesSuperviewLayoutMargins
propiedades en el código.
¿Qué son los márgenes en iOS8?
Los márgenes de diseño representan el relleno alrededor del interior de un UIView
sistema que el sistema de diseño puede usar al diseñar subvistas, para garantizar que quede un espacio entre el borde de una vista y una subvista. A este respecto, es muy similar a la propiedad de relleno asociada con bloques en CSS.
Por defecto, a UIView
tiene márgenes de diseño de 8 puntos en cada lado, y esto no se puede cambiar en Interface Builder . Sin embargo, al configurar la UIView.layoutMargins
propiedad 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 rectángulos de diseño:
Los márgenes se pueden usar para ayudar a diseñar sus vistas y subvistas. Todos UIView
vienen con márgenes de forma predeterminada, pero solo afectan la ubicación de la vista cuando configura una restricción relacionada con un margen.
Cómo usar los márgenes
La única forma de usar márgenes en Interface Builder es marcar la opción Relativo al margen mientras configura sus restricciones. Así es como dirige su restricción para usar márgenes en lugar de bordes al diseñar mi vista.
Echemos un vistazo a cuatro formas diferentes de configurar una restricción principal entre una vista y su subvista. Para cada restricción que revisamos, la primera asociación descrita será la principal de la subvista , y la segunda será la principal de la supervista . A lo que debe prestar mucha atención es al estado de verificación y desmarcación de la opción Relativo al margen de cada final de restricción, porque eso define si la restricción está vinculada al margen o al borde de la vista.
- 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).
- 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.
- Primer elemento (marcar), 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 en realidad hace que la subvista se superponga con la supervista.
- Primer ítem (cheque), segundo ítem (cheque). Esto realmente tiene el mismo efecto que 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.
Lo bueno de los márgenes
Esta nueva característica (iOS8) solo afecta el desarrollo de la interfaz de usuario si decides usar márgenes.
Mediante el uso de márgenes, puede ajustar la ubicación de varias 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 espacio, 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, cambiar el margen izquierdo de la supervista afectará a todas las subvistas al mismo tiempo.