UIView autoresizingMask – Interface Builder to Code – Crear stackres y muelles de forma programática – Swift u Objective-C

He presentado algunas subvistas con Interface Builder, pero me gustaría hacerlo en código.

He leído los documentos de UIView sobre cómo configurar la propiedad view.autoresizingMask. Estoy buscando una explicación lógica de cómo traducir los puntales y muelles mediante el uso de las diversas máscaras que se ofrecen (por ejemplo, UIViewAutoresizingFlexibleLeftMargin , etc.).

Al configurar la máscara de aumento de tamaño para una vista, utilice un OR ( | ) (Objective-C) inclusive bit a bit, o una matriz (Swift 2, 3) para especificar resortes y puntales .

  • Los resortes se representan especificando una máscara (Objective-C o Swift 3, respectivamente):

    • muelle vertical: UIViewAutoresizingFlexibleHeight o .flexibleHeight

    • muelle horizontal: UIViewAutoresizingFlexibleWidth o .flexibleWidth

  • Struts están representados por la falta de una de las cuatro máscaras de ‘margen flexible’ (es decir, si no existe un strut, se especifica la máscara para ese margen):

    • UIViewAutoresizingFlexibleLeftMargin o .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin o .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin o .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin o .flexibleBottomMargin

Por ejemplo, una vista con un resorte horizontal y puntales superiores e inferiores tendría el ancho y los márgenes izquierdo y derecho especificados como flexibles:

Swift 3

 mySubview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin] 

Swift 2

 mySubview.autoresizingMask = [.FlexibleWidth, .FlexibleLeftMargin, .FlexibleRightMargin] 

Swift 1.2

 mySubview.autoresizingMask = .FlexibleWidth | .FlexibleLeftMargin | .FlexibleRightMargin 

C objective

 mySubview.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin); 

enter image description here

UIViewAutoResizingMasks es lo que llamamos ‘struts’ y ‘springs’. Considera esto: tienes un cuadrado grande con un cuadrado pequeño adentro. Para que ese cuadrado se mantenga perfectamente centrado, debe establecer un ancho fijo desde cada borde interior del cuadrado grande, a fin de restringirlo. Estos son puntales.

Los resortes, por otro lado, funcionan más como lo hace un UIView durante la rotación. Digamos que nuestra vista debe permanecer en la parte inferior de la pantalla, alineada en el centro (al igual que una UIToolbar). Queremos mantener su resorte superior flexible para que cuando la vista gire de 460 px a 320 px, mantenga su misma posición relativa a las dimensiones ahora cambiadas de la pantalla. Resaltar uno de esos resortes en IB equivale a configurar el UIViewAutoResizingMask apropiado y resaltar específicamente el resorte superior es similar a invocar myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin .

Los valores se pueden usar en tándem encerrándolos en un par de paréntesis y usando un operador o como myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

Las máscaras te informan los números porque son un típico de un NSUInteger y esas son las banderas que Apple les ha asignado. Cmd + clic en uno para ver su definición de método.