what sierra new mac high for features developer apple ios cocoa-touch uiview autoresizingmask

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;