2011-03-30 5 views
20

Estoy tratando de entender cómo el view asociado a un UITabBarController, UINavigationController o UIViewController reacciona cuando se activa la barra de estado durante la llamada.
Mi problema es que parecen comportarse de manera diferente y esto me causa efectos secundarios ....¿Cómo influye la barra de estado de la llamada en el tamaño de la vista de UIViewController? (y cómo manejarlo correctamente)

He hecho un proyecto que cambia la vista raíz del controlador de la ventana para los 3 tipos anteriores y volcar el description del view para obtener las coordenadas del cuadro.


  • UIViewController

enter image description here

estado OFF Mi lugar :

 
UIView: 0x4e2a1f0; frame = (0 20; 320 460); autoresize = W+H; .... 
EN
UIView: 0x4e2a1f0; frame = (0 40; 320 440); autoresize = W+H; ...

Ésta entiendo: cuando aparezca la barra de estado propio lugar, el ancho de la vista de la UIViewController se encoge y pierde 20, y sus movimientos y coord de 20 a 40.

que es perfecto! Yo esperaría lo mismo al reemplazar un clásico UIViewController con un UITabBarController o un UINavigationController ¡pero ese no es el caso!


  • UINavigationController

    enter image description here

barra de estado de llamadas entrantes OFF

UILayoutContainerView: 0x4b35ab0; frame = (0 0; 320 480); autoresize = W+H; ..
EN
UILayoutContainerView: 0x4e1b060; frame = (0 0; 320 480); autoresize = W+H; ..

En ese caso, la vista manejada por el UINavigationController no tiene sus propiedades de marco cambiadas cuando se cambia la barra de estado de incall?! (¿Por qué? :()


  • UITabBarController

enter image description here OFF

UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...
EN
UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...

Igual que en el UINavigationController: el view del UITabBarController no parece verse afectado cuando se activa la barra de estado de incall.


¿Alguien me puede explicar cómo funciona este cambio de tamaño al mostrar la barra de estado de llamadas entrantes?
Mi objetivo final es mostrar un UIView que se muestra ARRIBA todo UITabBarController y que cambia el tamaño correctamente cuando se muestra el estado de la llamada entrante. Sin embargo, realmente no sé dónde poner esa vista en la jerarquía de vistas: si lo agrego como un elemento secundario de la vista de UITabBarController, ya que este no reacciona a la visualización del estado de llamada entrante, el mío tampoco reacciona: (

+3

+1 para preocuparse por esto. –

Respuesta

17

la altura de la vista cuando se activa la barra de estado de llamada entrante depende de la forma en que está anclado.

Juega un poco con el autoResizingMask de la UIView para controlar si la vista debería moverse hacia abajo o cambiar el tamaño cuando el durante la llamada barra de estado muestra.

Estas dos propiedades,

UIViewAutoresizingFlexibleTopMargin 
UIViewAutoresizingFlexibleHeight 

te ayudará. El primero empuja la vista hacia abajo, el segundo cambia el tamaño.

4

Su ejemplo regular de UIViewController tiene [wantsFullScreenLayout] establecido en NO, lo que hace que la vista se dimensione automáticamente para que no pase por debajo de la barra de estado.

UINavigationController y UITabBarController, por el contrario, wantsFullScreenLayout predeterminado a YES. Por lo tanto, sus vistas abarcan toda la ventana y dimensionan y posicionan sus subvistas por sí mismas para manejar de forma apropiada la barra de estado. Si establece explícitamente la propiedad en estos controladores en NO, debe obtener el comportamiento que desea (pero luego perderá la capacidad de manejar adecuadamente los controladores secundarios que establecen wantsFullScreenLayout en SÍ, si le importa eso).

En su ejemplo de UITabBarController, por cierto, parece que no está imprimiendo la información para la vista del controlador de la barra de pestañas; aquí que es un UILayoutContainerView, no un UIView simple.

+0

Hum, comentario bastante interesante, ¡voy a probar tu pista! Muchas gracias. – yonel

+0

Esto no pareció funcionar para mí. – dacopenhagen

1

Lo ideal sería que te olvides de la cantidad de la cantidad de la vista que se redimensiona y juega con la máscara Autoresizing.

Cuestiones relacionadas