我想知道 iPhone X 顶部栏的确切高度。请您提供 iPhone X 的状态栏和导航栏高度。 请帮帮我。
8 回答
然而,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
您可以通过在包含的视图控制器中使用safeAreaInsets
以编程方式获取导航栏的高度:view
let navBarHeight = view.safeAreaInsets.top
这将说明它是否是一个大标题导航栏,以及是否附加了一个搜索栏。
有关更多信息,请参阅safeAreaInsets
文档。
您可以使用导航栏的 .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 原点相加似乎可以给出正确的总高度,而不管设备如何。
您可以通过以下方式简单地获取它(Swift 3):
let barHeight = navigationController?.navigationBar.frame.maxY
要获得正确的值,请确保在设置后调用它prefersLargeTitles
navigationController?.navigationBar.prefersLargeTitles = false
Apple Docs 中没有规范
根据Geoff Hackworth的说法,其 88
导航标题类型:
- 标准标题
- 大标题
在 iOS 11 中增加导航栏
navigationController?.navigationBar.prefersLargeTitles = true
如果您使用的是 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)
如果您想知道需要从哪里开始内容,请使用它
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
}
}