2011-08-30 15 views
6

Quiero colocar un sub UIView (sub_UIView) como una subvista del padre UIView (parent_UIView). Cuando parent_UIView cambia el tamaño/se mueve, la sub_UIView mantendrá la posición relativa de parent_UIView. Por ejemplo, sub_UIView está en la esquina inferior derecha de parent_UIView. Cuando el parent_UIView se mueve, la sub_UIView permanecerá en la esquina inferior derecha de parent_UIView automáticamente.¿Cómo manejar el posicionamiento relativo en iOS automáticamente?

me las arreglé para hacerlo de forma manual mediante la actualización del marco de la sub_UIView cuando se mueve el marco de la parent_UIView, pero cómo hacer esto de forma automática en iOS? ¿hay alguna propiedad para esto? (Similar a autoresizingmask para cambiar el tamaño subvistas)

Gracias!

+0

Por qué no puedes configurar 'autoresizingMask' apropiadamente a su hijo' UIView'? ¡Después de todo, es una subvista si lo haces el hijo de otra vista! –

+0

Gracias por la respuesta. Lo hice en la subvista: – androidkc

+0

[self setAutoresizingMask: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin]; pero parece que no funciona. – androidkc

Respuesta

4

Actualización respuesta de edad, que sólo se menciona el cambio de tamaño máscaras

autoLayout (IOS 6)

En iOS 6, se añadió autolayout, aunque, un poco feo para trabajar con XCode en un guión gráfico/xib. El diseño automático es demasiado grande para explicarlo, pero la esencia de esto es que se trata de un conjunto de reglas entre vistas dentro de la jerarquía. Por lo tanto, puede colocar la posición x de una vista en el borde derecho de una vista principal. Ver las Auto Layout Programming Guide

Máscaras de tamaño automático (IOS 2)

Echa un vistazo a las opciones en el inspector Tamaño:

Autoresizing and positioning inside a view

Esto es el equivalente de hacer

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight; 

Tenga en cuenta que hay una diferencia entre hacerlo por código y hacerlo a través de IB. Los ajustes de ajuste automático de IB para los bordes funcionan como puntales, seleccionar el más adecuado, por ejemplo, significa, "mi borde derecho ahora está pegado al borde derecho de la supervista".

Por otra parte, el código hace lo contrario, donde tiene que especificar qué fronteras no se pavonean-ed, aka. ellos son flexibles La altura y el ancho funcionan normalmente.

Disposición subvistas (IOS 2, pero trampas para iOS5 +)

Si todo falla, no empezar a hacer la colocación manual por todo el lugar, he estado en esa posición, y que sólo conduce a unmaintanable, código de espagueti, donde tres o más métodos están jugando con las mismas propiedades de vista.

En su lugar, prefieren hacer todo su posicionamiento personalizado en UIView -layoutSubviews. Se llama a este método según sea necesario cuando se activó setNeedsLayout; por ejemplo, cuando cambia el ancho de una vista, las subvistas obtienen el evento de subvistas de diseño. También hace que la implementación de interfaces rotativas sea mucho más fácil, ya que se llama a este método para el nuevo ancho, para determinar cómo se verá la animación.

Tenga en cuenta ese diseño subvistas funciona después de Auto Layout máscaras/Auto-cambio de tamaño se han realizado.

Cuestiones relacionadas