답변:
어떤 문제가 있습니까 스위프트 2.X는 :
UIApplication.sharedApplication().statusBarFrame.size.height
Swift 3 또는 Swift 4 :
UIApplication.shared.statusBarFrame.height
UIKit
가져 왔는지 확인
import UIKit
iOS 13에서는 지원 중단 경고가 표시됩니다. "
'statusBarFrame'은 iOS 13.0에서 더 이상 사용되지 않습니다. 대신 창 장면의 statusBarManager 속성을 사용합니다.
이 문제를 해결하려면 :
let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
size
Swift 3 에서는 생략 할 수 있습니다 UIApplication.shared.statusBarFrame.height
.
view.window?
.UIApplication.shared.keyWindow?
iOS 13 이상 및 Swift 5 용 이전 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
}
행복한 코딩!
이것이 내가 사용하는 것입니다.
struct Screen {
static var width: CGFloat {
return UIScreen.main.bounds.width
}
static var height: CGFloat {
return UIScreen.main.bounds.height
}
static var statusBarHeight: CGFloat {
return UIApplication.shared.statusBarFrame.size.height
}
}
그런 다음 다음을 수행 할 수 있습니다.
Screen.statusBarHeight
Objective-C와 같습니다.
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
이것은 다음에서 표준 변수로 포함됩니다.
Ibrahim의 답변 수정 :
extension UIApplication {
static var statusBarHeight: CGFloat {
var statusBarHeight: CGFloat = 0
if #available(iOS 13.0, *) {
let window = shared.windows.filter { $0.isKeyWindow }.first
statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
} else {
statusBarHeight = shared.statusBarFrame.height
}
return statusBarHeight
}
}
내 swiftUI 프로젝트에서 이것은 작동했습니다.
import UIKit
import SwiftUI
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView()
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
if let statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height {
SceneDelegateDataGetter.shared.height = statusBarHeight
}
window.rootViewController = HostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
}
}
class SceneDelegateDataGetter {
static let shared = SceneDelegateDataGetter()
public fileprivate(set) var height: CGFloat = 0
}
사용시
SceneDelegateDataGetter.shared.height
UIApplication.shared.statusBarFrame.size.height