59

我正在编写一个UITabBar用于部分导航的应用程序。我还使用它UIScrollView来呈现比屏幕通常可以处理的更多信息。因此,我需要设置滚动视图以考虑高度,UITabBar以便显示所有信息。

有没有办法计算heightUITabBar

4

12 回答 12

74

如果视图控制器的祖先是标签栏控制器,您可以从该标签栏检索高度。

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
于 2013-05-18T05:31:41.983 回答
69

它是 320 x 49。

如果你想测试,打开Interface Builder,添加一个UITabBar,进入标尺,你会看到

UITabBar 继承自 UIVIew所以你可以使用frame.size.height来获取高度

于 2010-06-24T03:02:31.530 回答
20

在斯威夫特:

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

依靠标签栏的实际高度,并使用幻数作为后备。

于 2017-10-10T07:09:57.873 回答
10

斯威夫特 3+

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

它应该打印 49.0(类型 CGFloat)

于 2017-05-09T15:30:21.817 回答
9

我希望通过在 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] bounds] 而不是 [[self view] frame],因为后者包含 20 像素的顶栏作为 Y 偏移量(它会偏离垂直居中)。

希望这对某人有帮助!

顺便说一句:我使用的是 iOS 4.3 和 XCode 4,TabBar 高度的“硬编码”值对我来说仍然是 49!

于 2011-05-21T13:53:34.413 回答
4

我知道这并不理想,但我真的不想在任何地方都有一个幻数常数。我所做的是创建一个一次性的 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];

我喜欢这个的是它会正确地将标签栏放置在父级的底部,而不管父级的大小。

于 2012-09-25T03:44:16.180 回答
4

在大多数情况下,这应该适用于 UIViewController 的任何实例:

bottomLayoutGuide.length
于 2016-05-31T09:14:31.290 回答
3

在 swift 4 和 5. self.tabBarController?.getHeight()

extension UITabBarController{

    func getHeight()->CGFloat{
        return self.tabBar.frame.size.height
    }

    func getWidth()->CGFloat{
         return self.tabBar.frame.size.width
    }
}
于 2019-11-20T09:42:19.230 回答
1

这就是我让它在 swift 4.1 中工作的方式

let tabBarHeight = CGFloat((self.tabBarController?.tabBar.frame.size.height)!)
于 2018-09-11T23:25:50.123 回答
0
let screenHeight = UIApplication.shared.statusBarFrame.height +
            self.navigationController!.navigationBar.frame.height + (tabBarController?.tabBar.frame.size.height)!

这非常有效,基于这里的一些 ppls 回答

于 2020-11-18T04:29:58.137 回答
0

斯威夫特 5 更新:

由于这个线程很旧,我在这里发布另一个线程的更新:https ://stackoverflow.com/a/25550871/14559220 。总结一下,

在纵向和常规横向中,高度仍然是 49 点。在紧凑的景观中,高度现在是 32 点。

在 iPhone X 上,纵向高度为 83 点,横向高度为 53 点。

于 2021-05-26T20:55:10.990 回答
0

斯威夫特 5

    if let tabBarController = tabBarController {
        let tabBarSafeAreaHeight = tabBarController.tabBar.frame.size.height - 
            tabBarController.tabBar.safeAreaInsets.bottom
    }

这会考虑到 safeAreaInsets (UIEdgeInsets) 来计算 UITabBar 的高度

在撰写本文时,这等于 iPhone 肖像上的 49

于 2021-09-07T09:25:38.727 回答