web-dev-qa-db-ja.com

UITabBarの高さを計算する

ナビゲーションの一部にUITabBarを使用するアプリを書いています。また、画面で通常処理できる以上の情報を表示するためにUIScrollViewを使用しています。このため、すべての情報が表示されるように、UITabBarの高さを考慮してスクロールビューを設定する必要があります。

heightUITabBarを計算する方法はありますか?

47
Matt Delves

320 x 49です。

テストする場合は、Interface Builderを開き、UITabBarを追加して、ルーラーに移動すると、表示されます

ITabBarはUIVIewから継承されます ですので、 frame.size.height を使用して高さを取得できます

63
vodkhang

View ControllerにTab Bar Controllerである祖先がある場合、そのTab Barから高さを取得できます。

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

ViewControllerのビューのVISIBLE部分でラベルを中央に配置することで、同様のことをしようとしていました。このViewControllerはUITabBarControllerに属していました。

ラベルの中央揃えに使用したコードは次のとおりです。

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

[[self view] frame]ではなく[[self view] bounds]を使用したことに注意してください。後者はYオフセットとして20ピクセルの上部バーを含むためです(垂直方向のセンタリングが無効になります)。

これが誰かを助けることを願っています!

ちなみに、私はiOS 4.3とXCode 4を使用していますが、TabBarの高さの「ハードコード」値はまだ49です。

8
mbm29414

Swiftの場合:

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

タブバーの実際の高さに依存し、フォールバックとしてマジックナンバーを使用します。

8
GK100

Swift 3+

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

49.0(タイプCGFloat)が印刷されます。

6
Andrey

これは、ほとんどの場合、UIViewControllerのインスタンスで機能するはずです。

bottomLayoutGuide.length
3

これは理想的ではないことは知っていますが、マジックナンバーをどこにも定数にしたくありませんでした。私がしたことは、使い捨てUITabBarControllerを作成し、そこから高さを取得することでした。

また、[UITabBar initWithFrame:]が期待どおりに機能するのに、[bar setFrame:]が機能しないため、これを行いました。作成時にフレームが正しい必要がありました。

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

これについて私が気に入っているのは、親のサイズに関係なく、タブバーを親の下部に正しく配置できることです。

3
PKCLsoft

これが、Swift 4.1

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

0