如何在 iPhone X 上获取 tabBar 的高度

Posted

技术标签:

【中文标题】如何在 iPhone X 上获取 tabBar 的高度【英文标题】:How to get height of tabBar on iPhone X 【发布时间】:2018-11-11 10:49:19 【问题描述】:

我像这样在tabBar上方添加ViewController

 cardViewController = storyboard?.instantiateViewController(withIdentifier: "CardViewController") as? CardViewController
    addChildViewController(cardViewController)
    cardViewController.didMove(toParentViewController: self)

    view.addSubview(cardViewController.view)

    cardViewController.view.frame = CGRect(x: 0, y: view.frame.height - cardHandlAreaHight - tabBarHight,
                                           width: view.bounds.width, height: cardHight)

    cardViewController.view.clipsToBounds = true

我得到的 tabBar 的大小是这样的:

tabBarHight = tabBarController?.tabBar.frame.size.height

这适用于所有 iPhone,但不适用于 iPhone X 如何解决这个问题?

【问题讨论】:

你试过约束吗? 为什么还要它的高度? @Vyacheslav 没有。这是卡片视图,也就是此视图的底部表单。 【参考方案1】:

在我的情况下,获得这一点的正确方法不是获得 safeArea,而是像这样获得 tabBarFrame 的点

let topTapbarPosition = tabBarController?.tabBar.frame.minY

然后像这样使用它

cardViewController.view.frame = CGRect(x: 0, y: topTapbarPosion! - cardHeight!,

                                           width: view.bounds.width, height: cardHeight!)

它适用于所有型号的 iPhone

【讨论】:

【参考方案2】:

您应该通过自动布局来定位添加的视图,而不是设置框架。

但如果你真的需要处理像素大小,你可以通过

访问底部填充
view.safeAreaInsets.bottom

您还应该看看:https://***.com/a/46831519/2133377

【讨论】:

你能举例说明如何通过自动布局添加 ViewController 吗?以及如何在我的情况下使用 view.safeAreaInsets.bottom ?在 view.safeAreaInsets.bottom 处设置 Y 对于自动布局,请查看:developer.apple.com/library/archive/documentation/… 对于view.safeAreaInsets.bottom 的解决方案。你必须用view.safeAreaInsets.bottom替换tabBarHight 这仅适用于 viewDidLayoutSubviews(),但我在 ViewDidLoad 的时刻需要此值。 Answer 不能解决我的问题,我需要在 viewDidLoad 中知道这个值。你有什么想法吗? 但是 viewDidLoad() 是确定视图大小的错误位置。因此,您应该使用自动布局或将计算放在 viewDidLayoutSubviews() 中。

以上是关于如何在 iPhone X 上获取 tabBar 的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 上设置第一个以编程方式选择的 TabBar

iOS 11 iPhone X 模拟器 TabBar 图标和标题呈现在顶部相互覆盖

iOS-导航栏、状态栏及Tabbar高度(区分iPhone X与其他iPhone机型)

在 iPhone 上更改 Tabbar 的颜色

iPhone 6 Simulator,iOS 8 上奇怪的 TabBar 背景问题

iOS 获取状态栏、导航栏、tabBar高度