ฉันจะรับความสูงของแถบสถานะโดยใช้โปรแกรมใน Swift ได้อย่างไร
ใน Objective-C จะเป็นเช่นนี้:
[UIApplication sharedApplication].statusBarFrame.size.height.
ฉันจะรับความสูงของแถบสถานะโดยใช้โปรแกรมใน Swift ได้อย่างไร
ใน Objective-C จะเป็นเช่นนี้:
[UIApplication sharedApplication].statusBarFrame.size.height.
คำตอบ:
มีปัญหากับSwift 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+ และ iOS เวอร์ชันเก่ากว่าสำหรับ Swift 5
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
}
Happy Coding!
Swift เป็นเพียงภาษาอื่น องค์ประกอบ API เหมือนกัน อาจจะเป็นเช่นนี้:
let app = UIApplication.sharedApplication()
let height = app.statusBarFrame.size.height
นี่คือสิ่งที่ฉันใช้:
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
}
สิ่งนี้รวมเป็นตัวแปรมาตรฐานใน:
ทำใหม่คำตอบจากอิบราฮิม:
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