60

我想知道 iPhone X 顶部栏的确切高度。请您提供 iPhone X 的状态栏和导航栏高度。 请帮帮我。

在此处输入图像描述

4

8 回答 8

91

然而,iPhone X 上的显示屏比 4.7 英寸显示屏高145pt ,从而为内容提供了大约 20% 的额外垂直空间。

有关更多信息,您可以从苹果文档中获得 HIG for iphone X,并在此处 1此处 2详细描述

在此处输入图像描述

状态栏高度

以前20pt,现在44pt

由于显示屏顶部的传感器,新的状态栏分为两部分。如果你的 UI 对那个空间做了一些特别的事情(以前是 20pt 高,现在是 44pt),因为它在 iPhone X 上会更高。确保它可以动态改变高度。一个很棒的事情是,如果用户打电话或使用导航应用程序,高度不会改变,这在其他 iPhone 上是以前的情况。

在此处输入图像描述

肖像

导航栏高度正常88和大标题时间140

  • 标准标题 - 44pt(88pt 带状态栏)
  • 大标题 - 140pt
  • 底栏 - 34pt

景观

  • 标准标题 - 32pt
  • 底栏 - 21pt
于 2017-09-13T12:32:13.800 回答
28

导航栏像往常一样是 44pt(当没有大标题时),状态栏从 20pt 增加到 44pt。以下是您可以在调试器中输入的内容来验证它:

在此处输入图像描述

于 2017-11-15T21:13:02.893 回答
16

您可以通过在包含的视图控制器中使用safeAreaInsets以编程方式获取导航栏的高度:view

let navBarHeight = view.safeAreaInsets.top

这将说明它是否是一个大标题导航栏,以及是否附加了一个搜索栏。

有关更多信息,请参阅safeAreaInsets文档

于 2017-11-09T21:50:09.757 回答
13

您可以使用导航栏的 .frame 属性来计算顶部栏区域的总高度:

斯威夫特 5.0:

let xBarHeight = (self.navigationController?.navigationBar.frame.size.height ?? 0.0) + (self.navigationController?.navigationBar.frame.origin.y ?? 0.0)

对象:

CGRect navbarFrame = self.navigationController.navigationBar.frame;
float topWidth  = navbarFrame.size.width;
float topHeight = navbarFrame.size.height + navbarFrame.origin.y;

我想这有点作弊,但是将导航栏的高度与它的 y 原点相加似乎可以给出正确的总高度,而不管设备如何。

于 2017-11-01T20:01:01.007 回答
12

您可以通过以下方式简单地获取它(Swift 3):

let barHeight = navigationController?.navigationBar.frame.maxY

要获得正确的值,请确保在设置后调用它prefersLargeTitles

navigationController?.navigationBar.prefersLargeTitles = false
于 2017-11-22T08:30:18.117 回答
4

Apple Docs 中没有规范

苹果文档

根据Geoff Hackworth的说法,其 88

导航标题类型:

  • 标准标题
  • 大标题

在 iOS 11 中增加导航栏

navigationController?.navigationBar.prefersLargeTitles = true
于 2017-09-13T13:11:30.160 回答
3

如果您使用的是 UIWindow 并且需要知道顶部栏的高度,则可以使用:

// old way of getting keyWindow
//guard let keyWindow = UIApplication.shared.keyWindow else { return }

// new way of getting keyWindow
guard let keyWindow = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else { return }

let navBarHeight = keyWindow.safeAreaInsets.top

print("navBarHeight:" , navBarHeight)

我从@Paolo 的回答中得到了这个想法

于 2020-05-07T01:01:20.003 回答
0

如果您想知道需要从哪里开始内容,请使用它

extension UIViewController {
  var navigationBarbarContentStart: CGFloat {
    return self.navigationBarTopOffset + self.navigationBarHeight
  }
  var navigationBarTopOffset: CGFloat {
    return self.navigationController?.navigationBar.frame.origin.y ?? 0
  }

  var navigationBarHeight: CGFloat {
    return self.navigationController?.navigationBar.frame.height ?? 0
  }
}
于 2019-10-04T11:02:57.013 回答