Estaba en una suposición (probablemente falsa) de que habilitar el indicador de margen derecho en xib es equivalente a usar UIViewAutoresizingFlexibleLeftMargin
código interno, etc.
Entonces, solía pensar de acuerdo con esta instantánea:
Más tarde hoy tuve que hacer una verificación cruzada, y me topé con este hilo .
Y también la documentación de Apple, titulada con la sección con el título - "Manejo de cambios de diseño automáticamente usando reglas de autoresizing" en este enlace: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatedViews.html
Así que ahora tengo un concepto renovado en mi mente en cuanto a cómo configurar las máscaras de autoresignificación mediante programación sería equivalente a la configuración de xib:
Escenario 1 : la configuración solo (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)
es equivalente a:
En XIB?
Escenario 2 : la configuración (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)
en código es equivalente a:
En XIB?
¿Son correctos mis 2 escenarios renovados? ¿Estoy ahora en mi entendimiento?
fuente
Respuestas:
Sí, Interface Builder lo tiene "invertido" en cierto sentido (o UIView, dependiendo de cómo lo veas). Sus "escenarios" citados son correctos.
fuente
Sí, has citado las cosas correctamente. Además, estoy de acuerdo en que se siente un poco al revés, por eso aprecio tu publicación.
Es posible
UIViewAutoresizingFlexibleMargins
que desee utilizar una macro de preprocesador al hacer que el margen de UIView sea flexible en todas las direcciones. Puse esto en el archivo de encabezado precompilado para que se incluya en todas partes.El uso
UIViewAutoresizingFlexibleMargins
hará que un elemento de la IU permanezca centrado ya que NO estará abrazando a ningún lado. Para hacer que el elemento crezca / se reduzca con su elemento primario, establezca elUIViewAutoresizingFlexibleWidth
yUIViewAutoresizingFlexibleHeight
respectivamente.Me gusta usar
UIViewAutoresizingFlexibleMargins
porque luego puedo hacer referencia a él como:en vez de
Muy a menudo veo estos márgenes O juntos en una línea como en el ejemplo anterior. Simplemente difícil de leer.
fuente
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 cambio,UIViewAutoresizingFlexibleRightMargin
= encendido si el puntal derecho está deshabilitado, apagado si el puntal derecho está habilitado.Al principio es bastante confuso, pero si ves de cerca, hay una diferencia en los resortes y puntales. No sé por qué Apple hizo esto, pero para mí, hubo algunos casos en que fue más fácil de usar. Y usar propiedades opuestas en el código es aún más confuso.
fuente
Swift 4 usa esto
C objetivo
fuente