计算UITabBar的高度

时间:2010-06-24 02:56:31

标签: iphone cocoa-touch uikit uiscrollview uitabbar

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

有没有办法计算height的{​​{1}}?

12 个答案:

答案 0 :(得分:61)

这是320 x 49.

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

UITabBar is inherited from UIVIew因此您可以使用frame.size.height获取身高

答案 1 :(得分:56)

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

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

答案 2 :(得分:7)

我希望通过在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!

答案 3 :(得分:6)

Swift 3 +

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

应该打印49.0(CGFloat类型)

答案 4 :(得分:5)

在斯威夫特:

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

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

答案 5 :(得分: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];

我喜欢这样,无论父母大小如何,它都会正确地将标签栏放在父母的底部。

答案 6 :(得分:3)

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

bottomLayoutGuide.length

答案 7 :(得分:1)

Swift 5

有一个漂亮的方法可以做到这一点,只需获取safeAreaLayout的框架即可,该框架将自身限制在UITabBar顶部的底部。之后,只需将UIScrollView的框架设置为安全区域的框架即可。

    let safeArea = self.view.safeAreaLayoutGuide.layoutFrame
    let scrollView = UIScrollView(frame: CGRect(x: self.view.safeAreaInsets.left, y: self.view.safeAreaInsets.top, width: safeArea.width, height: safeArea.height)
    scrollView.backgroundColor = UIColor.clear
    scrollView.showsVerticalScrollIndicator = false
    self.view.addSubview(scrollView)

答案 8 :(得分:0)

这就是我如何使其在Swift 4.1中正常工作

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

答案 9 :(得分:0)

在快速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
    }
}

答案 10 :(得分:0)

let screenHeight = UIApplication.shared.statusBarFrame.height +
            self.navigationController!.navigationBar.frame.height + (tabBarController?.tabBar.frame.size.height)!

这很完美,基于这里的几个ppls答案

答案 11 :(得分:0)

SWIFT 5 更新:

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

<块引用>

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

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