iPhone X的顶部栏高度是多少?

61

我想了解 iPhone X 顶部栏的准确高度。请你提供 iPhone X 的状态栏和导航栏高度。请帮助我。

图片描述

8个回答

94

然而,iPhone X 的显示屏比 4.7 英寸的显示屏多 145pt,因此内容垂直空间增加了大约20%。

若您需要更多信息,请参考苹果公司提供的 iPhone X 人机界面指南文档这里1这里2中的详细说明。

enter image description here

状态栏高度

原来是 20pt,现在变成 44pt

由于顶部显示有传感器,新的状态栏分为两个部分。如果您的 UI 在该空间(原来是 20pt 高,现在是 44pt)上做了特殊处理,则因为 iPhone X 上的状态栏更高,确保它可以动态更改高度。一个很棒的事情是,如果用户进行电话或使用导航应用程序,高度不会改变,而这在其他 iPhone 上曾经是这样的情况。

enter image description here

竖屏

导航栏高度 正常情况下为88,大标题时间为140

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

横版

  • 标准标题 - 32pt
  • 底栏 - 21pt

6
笔误:导航栏高度正常情况下为44pt。如果考虑状态栏,则高度为88pt。 - skensell

28

输入图像描述


5
为什么要截屏?-.- - d4Rk

16

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

let navBarHeight = view.safeAreaInsets.top

这将考虑导航栏是否为大标题以及是否附带搜索栏。

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


12
你可以使用导航栏的 .frame 属性来计算顶部栏区域的总高度:
Swift 5.0:
let xBarHeight = (self.navigationController?.navigationBar.frame.size.height ?? 0.0) + (self.navigationController?.navigationBar.frame.origin.y ?? 0.0)

ObjC:

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

我想这可能有些作弊,但将导航栏的高度与其y坐标相加似乎可以在任何设备上给出正确的总高度。


好的解决方案。谢谢。 - SURESH SANKE

12

你可以通过以下方式(Swift 3)轻松获取它:

let barHeight = navigationController?.navigationBar.frame.maxY

确保在设置prefersLargeTitles之后调用才能获得正确的值。

navigationController?.navigationBar.prefersLargeTitles = false

4

苹果文档中没有规定

苹果文档

根据Geoff Hackworth的说法,它是88

导航标题类型:

  • 标准标题
  • 大标题

iOS 11中增加导航栏高度

navigationController?.navigationBar.prefersLargeTitles = true

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的答案中得到了灵感


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
  }
}

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