ナビゲーションの一部にUITabBar
を使用するアプリを書いています。また、画面で通常処理できる以上の情報を表示するためにUIScrollView
を使用しています。このため、すべての情報が表示されるように、UITabBar
の高さを考慮してスクロールビューを設定する必要があります。
height
のUITabBar
を計算する方法はありますか?
320 x 49です。
テストする場合は、Interface Builderを開き、UITabBarを追加して、ルーラーに移動すると、表示されます
ITabBarはUIVIewから継承されます ですので、 frame.size.height を使用して高さを取得できます
View ControllerにTab Bar Controllerである祖先がある場合、そのTab Barから高さを取得できます。
CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
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です。
Swiftの場合:
let height = self.tabBarController?.tabBar.frame.height ?? 49.0
タブバーの実際の高さに依存し、フォールバックとしてマジックナンバーを使用します。
Swift 3+
let tabBarHeight = tabBarController?.tabBar.frame.size.height
print(tabBarHeight ?? "not defined")
49.0(タイプCGFloat)が印刷されます。
これは、ほとんどの場合、UIViewControllerのインスタンスで機能するはずです。
bottomLayoutGuide.length
これは理想的ではないことは知っていますが、マジックナンバーをどこにも定数にしたくありませんでした。私がしたことは、使い捨て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];
これについて私が気に入っているのは、親のサイズに関係なく、タブバーを親の下部に正しく配置できることです。
これが、Swift 4.1
let tabBarHeight = CGFloat((self.tabBarController?.tabBar.frame.size.height)!)