2012-05-06 17 views
46

He presentado algunas subvistas con Interface Builder, pero me gustaría hacerlo en código.UIView autoresizingMask - Generador de interfaz a código - Crear struts y resortes de forma programada - Swift u Objective-C

He leído UIView docs para establecer 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.).

Respuesta

115

Al configurar la máscara de tamaño automático para una vista, utilizar un bit a bit incluido OR (|) (Objetivo-C), o una matriz (Swift 2, 3) para especificar resortes y puntales.

  • resortes están representados mediante la especificación de una máscara (Objective-C o Swift 3, respectivamente):

    • muelle vertical: UIViewAutoresizingFlexibleHeight o .flexibleHeight

    • resorte horizontal: UIViewAutoresizingFlexibleWidth o .flexibleWidth

  • Los puntales están representados por la falta de una de las cuatro máscaras de "margen flexible" (es decir,si un puntal no existe, se especifica la máscara para que el margen):

    • UIViewAutoresizingFlexibleLeftMargin o .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin o .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin o .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin o .flexibleBottomMargin

Por ejemplo, una vista con un resorte y superior e inferior puntales horizontales tendría la anchura, y márgenes izquierdo y derecho especificado como flexible:

Swift 3

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

Swift 2

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

Swift 1,2

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

Objective-C

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

enter image description here

+3

@Flink - tu edición es erróneo. He revertido mi respuesta al estado original. Por favor, léalo cuidadosamente, especialmente esto: "Struts están representados por la falta de una de las cuatro máscaras de 'margen flexible' (es decir, si un puntal NO existe, se especifica la máscara para ese margen):" – MattyG

+0

Lo siento, mi error. .. – Shmidt

+0

muy útil, gracias – kukudas

8

UIViewAutoResizingMasks es a lo que nos referimos como '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 llamar al myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

Los valores pueden ser usados ​​en conjunto, encerrándolos en un par de paréntesis y utilizando una u operador como myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

Las máscaras están reportando números para usted, ya que son una typdef de un NSUInteger y esas son las banderas que apple los ha asignado. Cmd + clic en uno para ver su definición de método.

Cuestiones relacionadas