Swift中的状态栏高度

Ole*_*hko 91 statusbar ios swift

如何在Swift中以编程方式获取状态栏的高度?

在Objective-C中,它是这样的:

[UIApplication sharedApplication].statusBarFrame.size.height.
Run Code Online (Sandbox Code Playgroud)

Kir*_*ins 222

Swift 2.x有什么问题:

UIApplication.sharedApplication().statusBarFrame.size.height
Run Code Online (Sandbox Code Playgroud)

Swift 3或Swift 4:

UIApplication.shared.statusBarFrame.height
Run Code Online (Sandbox Code Playgroud)

确保UIKit已导入

import UIKit
Run Code Online (Sandbox Code Playgroud)

  • 让高度 = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0 不再起作用 (4认同)
  • 你可以在Swift 3中省略`size`:`UIApplication.shared.statusBarFrame.height`就足够了. (3认同)

Md.*_*san 18

更新的答案支持 Swift 5 的 iOS 13+ 和更旧的 iOS 版本

 func getStatusBarHeight() -> CGFloat {
    var statusBarHeight: CGFloat = 0
    if #available(iOS 13.0, *) {
        let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
        statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
    } else {
        statusBarHeight = UIApplication.shared.statusBarFrame.height
    }
    return statusBarHeight
}
Run Code Online (Sandbox Code Playgroud)

快乐编码!


Bob*_*bby 7

这是我使用的:

struct Screen {

 static var width: CGFloat {
  return UIScreen.main.bounds.width
 }

 static var height: CGFloat {
  return UIScreen.main.bounds.height
 }

 static var statusBarHeight: CGFloat {
  let viewController = UIApplication.shared.windows.first!.rootViewController
  return viewController!.view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
 }

}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

Screen.statusBarHeight
Run Code Online (Sandbox Code Playgroud)


vcs*_*nes 6

Swift 只是一种不同的语言。API 元素是相同的。也许是这样的:

let app = UIApplication.sharedApplication()
let height = app.statusBarFrame.size.height
Run Code Online (Sandbox Code Playgroud)