iphone - porcentaje - ¿Cómo afecta la barra de estado de In-Call al tamaño de vista de UIViewController?
como poner porcentaje de bateria en iphone 7 (3)
La altura de la vista cuando la barra de estado durante la llamada se alterna depende de la forma en que está anclada.
Juega un poco con la máscara automática de UIView para controlar si la vista debe moverse hacia abajo o cambiar de tamaño cuando aparezca la barra de estado durante la llamada.
Estas dos propiedades,
UIViewAutoresizingFlexibleTopMargin
UIViewAutoresizingFlexibleHeight
Te ayudará. El primero empuja la vista hacia abajo, el segundo cambia el tamaño.
Estoy tratando de entender cómo reacciona la view
asociada a un UITabBarController
, UINavigationController
o UIViewController
cuando se UIViewController
la barra de estado durante la llamada.
Mi problema es que parecen comportarse de manera diferente y esto me causa efectos secundarios.
Hice un proyecto que cambia el controlador de vista raíz de la ventana para los 3 tipos anteriores y vuelco la description
de la view
para obtener las coordenadas del marco.
-
UIViewController
estado inCall OFF :
UIView: 0x4e2a1f0; frame = (0 20; 320 460); autoresize = W+H; .... EN
UIView: 0x4e2a1f0; frame = (0 40; 320 440); autoresize = W+H; ...
Entiendo esto: cuando aparece la barra de estado durante la llamada, el ancho de la vista del UIViewController se contrae y pierde 20, y su coordenada y se mueve de 20 a 40.
Eso es perfecto ! Esperaría lo mismo cuando reemplace un UIViewController
clásico con un UITabBarController
o un UINavigationController
pero ese no es el caso!
UINavigationController
Barra de estado InCall 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 UINavigationController no tiene sus propiedades de marco cambiadas cuando la barra de estado durante la llamada está activada. (por qué ? :( )
-
UITabBarController
APAGADO
UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ... EN
UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...
Igual que en UINavigationController
: la view
del UITabBarController
no parece verse afectada cuando se cambia la barra de estado de incall.
¿Puede alguien explicarme cómo funciona este cambio de tamaño cuando aparece la barra de estado de incall?
Mi objetivo final es mostrar un UIView
que se muestre ARRIBA todo el UITabBarController
y que UITabBarController
tamaño correctamente cuando se muestre el estado de la llamada UITabBarController
. Sin embargo, realmente no sé dónde colocar una vista de este tipo en la jerarquía de vistas: si la agrego como un elemento secundario de la vista del Controlador de barra de la UIT, ya que esta no reacciona a la pantalla de estado de incall, la mía tampoco reacciona: (
Lo ideal es que olvide la cantidad de tamaño que se redimensiona la vista y juegue con la máscara Autoresizing.
Su ejemplo habitual de UIViewController tiene [ wantsFullScreenLayout
] establecido en NO, lo que hace que la vista tenga un tamaño automático para que no quede debajo de la barra de estado.
Por otro lado, UINavigationController y UITabBarController, por defecto, wantsFullScreenLayout
que wantsFullScreenLayout
YES. Por lo tanto, sus vistas ocupan toda la ventana, y dimensionan y posicionan sus subvistas para manejar adecuadamente la barra de estado. Si configura explícitamente la propiedad de estos controladores en NO, debe obtener el comportamiento que desea (pero luego perderá la capacidad de manejar adecuadamente los controladores secundarios que configuran wantsFullScreenLayout
en YES, si le importa).
En su ejemplo de UITabBarController, BTW, parece que no está imprimiendo la información para la vista del controlador de la barra de pestañas; Aquí es un UILayoutContainerView, no un UIView simple.