iOS 13中SwiftUI中的状态栏高度

问题描述 投票:0回答:1

如何获得当前场景的状态栏高度以在SwiftUI视图中使用?

看起来钥匙正在访问当前场景。从视图控制器,单击you can use view.window?.windowScene进入场景,但是在SwiftUI视图中呢?

swiftui uistatusbar uiscene
1个回答
0
投票

创建视图层次结构时,将窗口场景存储在环境对象中。环境对象可以是用于其他应用程序范围数据的现有对象。

final class AppData: ObservableObject {
    let windowScene: UIWindow? // Will be nil in SwiftUI previewers

    init(windowScene: UIWindowScene? = nil) {
        self.windowScene = windowScene
    }
}

创建环境对象时设置窗口场景。将对象添加到视图层次结构底部的视图中,例如根视图。

let rootView = RootView().environmentObject(AppData(windowScene: windowScene))

最后,使用窗口场景访问状态栏的高度。

struct MyView: View {
    @EnvironmentObject private var appData: AppData
    ...
    var body: some View {
        SomeView().frame(height: self.appData.windowScene?.statusBarManager?.statusBarFrame.height ?? 0)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.