SwiftUI-如何将顶部安全区域的背景色更改为灰色?

SwiftUI-如何将顶部安全区域的背景色更改为灰色?,swiftui,Swiftui,我想将顶部安全区域的背景色从绿色更改为灰色。我到处找了,但找不到任何解决办法。预览中的屏幕如下所示 我的代码: struct ContentView: View { @State var name = "" init() { //Use this if NavigationBarTitle is with Large Font UINavigationBar.appearance().largeTitleText

我想将顶部安全区域的背景色从绿色更改为灰色。我到处找了,但找不到任何解决办法。预览中的屏幕如下所示

我的代码:

struct ContentView: View {
    @State var name = ""
    init() {
            //Use this if NavigationBarTitle is with Large Font
           UINavigationBar.appearance().largeTitleTextAttributes = [.foregroundColor: UIColor.red]
           UINavigationBar.appearance().backgroundColor = .gray
        }
    var body: some View {
        NavigationView {
            
            ZStack{
                VStack{
                    TextField("Name", text: $name)
                        .frame(height:200)
                        .padding()
                        .background(backgrounImage())
                        .overlay(RoundedRectangle(cornerRadius: 20).stroke(Color.gray,lineWidth: 4))
                        .padding()
                    Spacer()
                }.navigationTitle("Tanvir")
                .background(Color.green.edgesIgnoringSafeArea(.all))
            }
            
        }
    }
}

您可以在
ZStack
顶部添加另一个视图:

    var body: some View {
        NavigationView {
            ZStack(alignment: .top) { // <- Don't forget this
                ,,,
 
                GeometryReader { reader in
                    Color.yellow
                        .frame(height: reader.safeAreaInsets.top, alignment: .top)
                        .ignoresSafeArea()
                }
            }
        }
    }

您可以在
ZStack
顶部添加另一个视图:

    var body: some View {
        NavigationView {
            ZStack(alignment: .top) { // <- Don't forget this
                ,,,
 
                GeometryReader { reader in
                    Color.yellow
                        .frame(height: reader.safeAreaInsets.top, alignment: .top)
                        .ignoresSafeArea()
                }
            }
        }
    }

使用此
ui应用程序
扩展来更改状态栏的颜色

extension UIApplication {
    /**
     Get status bar view
     */
    var statusBarUIView: UIView? {
        let tag = 13101996
        if let statusBar = self.windows.first?.viewWithTag(tag) {
            self.windows.first?.bringSubviewToFront(statusBar)
            return statusBar
        } else {
            let statusBarView = UIView(frame: UIApplication.shared.windows.first?.windowScene?.statusBarManager?.statusBarFrame ?? .zero)
            statusBarView.tag = tag
            
            self.windows.first?.addSubview(statusBarView)
            return statusBarView
        }
    }
}
用法

struct contentview状态栏:视图{
@State var name=“”
init(){
//如果NavigationBarTitle使用大字体,请使用此选项
UINavigationBar.appearance().largeTitleTextAttributes=[.foregroundColor:UIColor.red]
UINavigationBar.appearance().backgroundColor=.gray
}
var body:一些观点{
导航视图{
ZStack{
VStack{
TextField(“名称”,text:$Name)
.框架(高度:200)
.padding()
.background(backgroundImage())
.overlay(圆角矩形(拐角半径:20).笔划(颜色.灰色,线宽:4))
.padding()
垫片()
}.navigationTitle(“Tanvir”)
.背景(颜色.绿色.边缘识别安全区域(.all))
}
}奥纳佩尔先生{

UIApplication.shared.statusBarUIView?.backgroundColor=.gray/使用此扩展来更改状态栏的颜色

extension UIApplication {
    /**
     Get status bar view
     */
    var statusBarUIView: UIView? {
        let tag = 13101996
        if let statusBar = self.windows.first?.viewWithTag(tag) {
            self.windows.first?.bringSubviewToFront(statusBar)
            return statusBar
        } else {
            let statusBarView = UIView(frame: UIApplication.shared.windows.first?.windowScene?.statusBarManager?.statusBarFrame ?? .zero)
            statusBarView.tag = tag
            
            self.windows.first?.addSubview(statusBarView)
            return statusBarView
        }
    }
}
用法

struct contentview状态栏:视图{
@State var name=“”
init(){
//如果NavigationBarTitle使用大字体,请使用此选项
UINavigationBar.appearance().largeTitleTextAttributes=[.foregroundColor:UIColor.red]
UINavigationBar.appearance().backgroundColor=.gray
}
var body:一些观点{
导航视图{
ZStack{
VStack{
TextField(“名称”,text:$Name)
.框架(高度:200)
.padding()
.background(backgroundImage())
.overlay(圆角矩形(拐角半径:20).笔划(颜色.灰色,线宽:4))
.padding()
垫片()
}.navigationTitle(“Tanvir”)
.背景(颜色.绿色.边缘识别安全区域(.all))
}
}奥纳佩尔先生{

UIApplication.shared.statusBarUIView?.backgroundColor=.gray//它正在工作,但是我可以获得颜色视图的动态高度而不是给出近似值吗?更新为使用几何体读取器来获得精确高度。是的,它正在工作。但是在每个屏幕中,我需要设置ZStack和您的解决方案,这将是重复的。这完全是另一个问题估计,但不要担心,检查更新的答案;)它正在工作,但我可以得到颜色视图的动态高度,而不是给出近似值吗?更新为使用几何体读取器获得精确高度。是的,它正在工作。但在每个屏幕中,我需要设置ZStack和您的解决方案,这将是重复的。这完全是另一个问题但是不要担心,查看更新后的答案;)它可以工作,但是在SwiftUI 2中有没有更简单的解决方案?没有。状态栏没有特殊的功能。它可以工作,但是在SwiftUI 2中有没有更简单的解决方案?没有。状态栏没有特殊的功能。