Autoreización de máscaras programáticamente frente a Interface Builder / xib / nib

Estaba en una suposición (probablemente falsa) de que habilitar el indicador de margen derecho en xib es equivalente a usar UIViewAutoresizingFlexibleLeftMargin dentro del código, y así sucesivamente.

Entonces, solía pensar de acuerdo con esta instantánea: enter image description here

Más tarde hoy tuve que pasar el control, y tropecé con este hilo .

Y también la documentación de Apple, titulada con la sección con el título “Manejo de los cambios de diseño de forma automática mediante el uso de reglas de Autoresizing” en este enlace: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

Así que ahora tengo un concepto renovado en mi mente en cuanto a cómo el ajuste programático de máscaras sería equivalente a la configuración xib:

Escenario 1 : el ajuste solo (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) es equivalente a:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

En XIB?

Escenario 2 : El ajuste (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin) en el código es equivalente a:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

En XIB?

¿Son correctos mis 2 escenarios renovados? ¿Estoy ahora en mi entendimiento?

Sí, Interface Builder lo ha “revertido” en cierto sentido (o UIView, dependiendo de cómo lo mires). Tus “escenarios” citados son correctos.

Sí, has citado las cosas correctamente. Además, estoy de acuerdo en que se siente un poco al revés, por eso le agradezco su publicación.

Puede utilizar un preprocesador Macro UIViewAutoresizingFlexibleMargins al hacer que el margen de UIView sea flexible en todas las direcciones. Puse esto en el archivo de encabezado precomstackdo para que se incluya en todas partes.

 #define UIViewAutoresizingFlexibleMargins \ UIViewAutoresizingFlexibleBottomMargin | \ UIViewAutoresizingFlexibleLeftMargin | \ UIViewAutoresizingFlexibleRightMargin | \ UIViewAutoresizingFlexibleTopMargin 

El uso de UIViewAutoresizingFlexibleMargins hará que un elemento UI permanezca centrado ya que NO se adherirá a ningún lado. Para hacer que el elemento crezca o se encoja con su elemento primario, configure UIViewAutoresizingFlexibleWidth y UIViewAutoresizingFlexibleHeight respectivamente.

Me gusta usar UIViewAutoresizingFlexibleMargins porque luego puedo hacer referencia a ella como:

 myView.autoresizingMask = UIViewAutoresizingFlexibleMargins; 

en lugar de

 myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; 

Todos a menudo veo estos márgenes OR ‘juntos en una línea como el ejemplo anterior. Solo es difícil de leer.

enter image description here

Habilitar la flecha vertical / horizontal (llamada resorte) dentro de la caja hará que la altura / ancho sea flexible. Pero habilitar una línea externa (llamada strut) hará que ese lado sea inflexible / no flexible.

Habilitar la línea exterior izquierda (columna izquierda) no es equivalente a habilitar UIViewAutoresizingFlexibleRightMargin . En cambio, UIViewAutoresizingFlexibleRightMargin = on si el UIViewAutoresizingFlexibleRightMargin derecho está deshabilitado, off si el strut derecho está habilitado.

Es bastante confuso al principio, pero si lo observa de cerca, hay una diferencia en los resortes y los puntales. No sé por qué Apple hizo esto, pero para mí, hubo algunos casos en los que fue más fácil de usar. Y usar propiedades opuestas en el código es aún más confuso.

Swift 4 usa esto

 gadBannerView?.autoresizingMask = [.flexibleRightMargin , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin] 

C objective

 myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin; 
    Intereting Posts