如何通过编程获取选项卡栏的高度?

60

我发现UITabBar的高度为49px(或50px,根据来源而定)。

由于我不喜欢在我的代码中使用太多硬编码的值,我想知道是否可以通过编程的方式检索选项卡栏的高度。

祝好,
Niels R.

PS:我提出这个问题的原因是因为我有一个视图控制器(包含文本字段的列表视图),它要么仅被导航控制器推送(pushViewController),要么作为模态形式呈现(presentModalViewController)。当键盘弹出时,视图的大小会减小,但我必须考虑到选项卡仅在将视图控制器推送而不是作为模态形式呈现时才可见。

8个回答

149

我并不完全理解你的附言,但你可以这样做:

tabBarController?.tabBar.frame.size.height

谢谢。我很高兴自己在此期间找到了解决方法。有时候我会卡在一些非常愚蠢的问题上。:p - Niels R.
那么结果是什么?50还是49? - Anonymous White
2
我认为现在应该是:self.tabBarController?.tabBar.frame.size.height - Marco Pappalardo
3
有了iPhone X,这种情况不再存在,因此现在变得非常相关。 - nickdnk

14

如果你想获得UITabBar控件的标准高度,可以这样做:

    UITabBarController *tabBarController = [UITabBarController new];
    CGFloat tabBarHeight = tabBarController.tabBar.frame.size.height;

2
我喜欢这个答案。这是我最喜欢的答案。如果你正在使用Objective C,我推荐这个答案。 - Brian Whipp
5
这个答案不太好。你从头开始创建一个全新的UITabBarController,这完全是不必要和浪费的。如果你需要TabBar的高度,你应该获取当前tabBar的高度。 - Sti
牛逼的解决了iPhone X首次安装应用程序时错误的选项卡栏大小问题。 - ergunkocak

10

更漂亮的

CGRectGetHeight(self.tabBarController.tabBar.frame)

谢谢。并且在 Xcode 8 beta 的指导下,它被更改为“let tabBarHeight = (self.tabBarController?.tabBar.frame)!.height”。 - kometen
@kometen - 注意那里的强制解包(即:!),它可能会导致意外崩溃。 - NSTJ

6

请在您的vc中检查此项

bottomLayoutGuide.length

从iOS 11开始:"使用view.safeAreaLayoutGuide.bottomAnchor代替bottomLayoutGuide.topAnchor" - d4Rk
1
所以,基本上现在应该是 self.view.safeAreaInsets.bottom - d4Rk

3
在Swift 3中,你可以通过下面的代码来获得UITabBar的高度。 self.tabBarController!.tabBar.frame.size.height 这将返回一个CGFloat类型的高度值。

1

UITabBar 继承自 UIView,只要您可以访问到 UITabBar 实例,就可以访问和修改 UITabBar 的框架。

CGRect myRect = myTabBar.frame;

我有一个TabbarController子类,这行代码给了我完整的视图框架,即320x480。 - Nikesh K

1
如果一个对象基于UIView(大多数库中的可视元素都是如此),则可以从ivar“frame”获取大小。

0
尝试像这样使用选项卡栏的intrinsicContentSize属性。
let tabBarHeight = self.tabBarController.tabBar.intrinsicContentSize.height

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接