2010-06-24 8 views
35

Estoy escribiendo una aplicación que usa UITabBar para partes de la navegación. También estoy usando UIScrollView para presentar más información de la que normalmente puede manejar la pantalla. Debido a esto, necesito configurar la vista de desplazamiento para tener en cuenta la altura del UITabBar para que se muestre toda la información.calculando la altura de UITabBar

¿Hay alguna forma de calcular el height del UITabBar?

Respuesta

57

Es 320 x 49.

Si desea probar, abierta Interface Builder, agregue un UITabBar, ve en el señor, verá que

UITabBar is inherited from UIVIew para que pueda utilizar el frame.size.height para obtener la altura

+9

¿Se garantiza que se mantendrá así todo el tiempo?Prefiero usar la API para obtener el valor que confiar en usar IB e insertar números mágicos en la aplicación. –

+0

UITabBar se hereda de UIView, por lo que puede probar con frame.size.height de UIView – vodkhang

+0

Daré una oportunidad cuando regrese del trabajo. ¿Sabes si puedo obtener eso sin crear una instancia de un objeto? Además, ¿sería mejor crear una instancia ficticia o pasar el UITabBar en uso del delegado de la aplicación a la vista que estoy utilizando para que tenga un valor más preciso? –

7

Estaba buscando hacer algo similar al centrar una etiqueta en la parte VISIBLE de la vista de ViewController. Este ViewController pertenecía a un UITabBarController.

Aquí está el código que utiliza para centrar mi sello:

UILabel *roomLabel = [[UILabel alloc] init]; 
CGRect frame = [[self view] bounds]; 
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; 
frame.size.height -= tabBarHeight; 
[roomLabel setFrame:frame]; 
[[self view] addSubview:roomLabel]; 
[roomLabel release]; 

cuenta que he utilizado [Ver auto [] límites] no [[Ver auto] marco] ya que este último incluye la barra superior 20 píxeles como el desplazamiento Y (que arroja el centrado vertical).

Espero que esto ayude a alguien!

Por cierto: estoy usando iOS 4.3 y XCode 4 y el valor de "código fijo" para la altura de TabBar sigue siendo 49 para mí.

3

Sé que esto no es ideal, pero realmente no quería tener un número mágico constante en ninguna parte. Lo que hice fue crear un UITabBarController desechable, y obtener la altura a partir de ahí.

Hice esto también porque [UITabBar initWithFrame:] funciona según lo deseado, pero hacer un [bar setFrame:] no lo hace. Necesitaba que el marco fuera correcto en la creación.

UITabBarController *dtbc = [[[UITabBarController alloc] init] autorelease]; 

CGRect tabRect = [[[self navigationController] view] frame]; 
tabRect.origin.y = tabRect.size.height - [[dtbc tabBar] frame].size.height; 
tabRect.size.height = [[dtbc tabBar] frame].size.height; 

tabBar_ = [[UITabBar alloc] initWithFrame:tabRect]; 

Lo que me gusta de esto es que colocará correctamente la barra de pestañas en la parte inferior del elemento primario independientemente del tamaño de los elementos principales.

39

Si el controlador de vista tiene un antecesor que es un controlador de barra de pestañas, puede recuperar la altura desde esa barra de pestañas.

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height; 
2

Esto debería funcionar en la mayoría de los casos en cualquier instancia de UIViewController:

bottomLayoutGuide.length 
3

Swift 3+

let tabBarHeight = tabBarController?.tabBar.frame.size.height 
print(tabBarHeight ?? "not defined") 

Debe imprimir 49,0 (Tipo CGFloat)

0

En Swift :

let height = self.tabBarController?.tabBar.frame.height ?? 49.0 

Confiando en la altura real de la barra de pestañas, y utilizando el número mágico como alternativa.

Cuestiones relacionadas