ios - sierra - Autoreseando máscaras programáticamente contra Interface Builder/xib/nib
xcode ios 12 (4)
Estaba en la suposición (probablemente falsa) de que habilitar el indicador del 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:
Más tarde, hoy tuve que verificar y me topé con este hilo .
Y también la documentación de Apple, titulada con la sección con título: "Manejo de 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 la configuración de las máscaras automáticas sería equivalente a la configuración de xib:
Escenario 1 : solo configuración (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)
es equivalente a:
En XIB?
Escenario 2 : configuración
En XIB?
¿Son correctos mis 2 escenarios renovados? ¿Estoy ahora en mi entendimiento?
Sí, Interface Builder lo tiene "invertido" en cierto sentido (o UIView, dependiendo de cómo lo mires). Sus "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 lo que aprecio tu publicación.
Es posible que UIViewAutoresizingFlexibleMargins
utilizar una macro preprocesadora UIViewAutoresizingFlexibleMargins
al hacer que el margen de una UIView sea flexible en todas las direcciones. Puse esto en el archivo de encabezado precompilado para que se incluya en todas partes.
#define UIViewAutoresizingFlexibleMargins /
UIViewAutoresizingFlexibleBottomMargin | /
UIViewAutoresizingFlexibleLeftMargin | /
UIViewAutoresizingFlexibleRightMargin | /
UIViewAutoresizingFlexibleTopMargin
El uso de UIViewAutoresizingFlexibleMargins
hará que un elemento de la interfaz de usuario permanezca centrado, ya que NO estará abrazando a ningún lado. Para hacer que el elemento crezca o se contraiga con su elemento primario, establezca UIViewAutoresizingFlexibleWidth
y UIViewAutoresizingFlexibleHeight
respectivamente.
Me gusta usar UIViewAutoresizingFlexibleMargins
porque luego puedo hacer referencia a él como:
myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;
en lugar de
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
Muy a menudo veo estos márgenes OR''ed juntos en una línea como el ejemplo anterior. Simplemente difícil de leer.
Habilitar la flecha vertical / horizontal (llamada resorte) dentro de la caja hará que la altura / anchura sea flexible. Pero habilitar una línea externa (llamada puntal) hará que ese lado sea inflexible / no flexible.
Habilitar la línea exterior izquierda (puntal izquierdo) no es equivalente a habilitar UIViewAutoresizingFlexibleRightMargin
. En su lugar, UIViewAutoresizingFlexibleRightMargin
= on si el puntal derecho está deshabilitado, off si el puntal derecho está habilitado.
Es bastante confuso al principio, pero si ve de cerca, hay una diferencia en los resortes y 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 objetivo
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;