web-dev-qa-db-fra.com

calculer la hauteur de UITabBar

J'écris une application qui utilise UITabBar pour des parties de la navigation. J'utilise aussi UIScrollView pour présenter plus d'informations que ce que l'écran peut généralement gérer. Pour cette raison, j'ai besoin de configurer la vue de défilement pour prendre en compte la hauteur de la variable UITabBar afin que toutes les informations soient affichées.

Existe-t-il un moyen de calculer la height de la UITabBar?

42
Matt Delves

C'est 320 x 49. 

Si vous voulez tester, ouvrez Interface Builder, ajoutez un UITabBar, allez dans la règle, vous le verrez

UITabBar est hérité de UIVIew . Vous pouvez donc utiliser frame.size.height pour obtenir la hauteur.

60
vodkhang

Si le contrôleur de vue a un ancêtre qui est un contrôleur de barre d’onglet, vous pouvez récupérer la hauteur à partir de cette barre d’onglet.

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
53
Vladimir Shutyuk

Je cherchais à faire quelque chose de similaire en centrant une étiquette dans la partie visible de la vue d'un ViewController. Ce ViewController appartenait à un UITabBarController.

Voici le code que j'ai utilisé pour centrer mon étiquette:

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];

Notez que j’ai utilisé [[self view]] []] pas [[self view] frame] car ce dernier inclut la barre supérieure de 20 pixels comme décalage en Y (ce qui éloigne le centrage vertical).

J'espère que cela aide quelqu'un!

Au fait: j'utilise iOS 4.3 et XCode 4 et la valeur "hard-code" de la hauteur du TabBar est toujours de 49 pour moi!

7
mbm29414

Swift 3+

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

Il devrait imprimer 49.0 (Type CGFloat)

5
Andrey

En rapide:

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

S'appuyant sur la hauteur réelle de la barre de tabulation et utilisant le nombre magique comme solution de secours.

5
GK100

Cela devrait fonctionner dans la plupart des cas sur n'importe quelle instance de UIViewController:

bottomLayoutGuide.length
3

Je sais que ce n'est pas idéal, mais je ne voulais vraiment pas avoir un nombre magique constant, où que ce soit. Ce que j'ai fait était de créer un UITabBarController jetable et de prendre de la hauteur.

Je l'ai fait aussi parce que [UITabBar initWithFrame:] fonctionne comme vous le souhaitez, mais que [bar setFrame:] ne fonctionne pas. J'avais besoin que le cadre soit correct à la création.

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];

Ce qui me plaît dans cette situation est qu’elle placera correctement la barre d’onglet au bas du parent, quelle que soit sa taille.

3
PKCLsoft

Voici comment je l'ai fait fonctionner dans Swift 4.1

let tabBarHeight = CGFloat ((self.tabBarController? .tabBar.frame.size.height)!)

0
Graphics Factory