Swiftui 如何在父视图使用IgnoringSafeArea()时访问safeArea插图

Swiftui 如何在父视图使用IgnoringSafeArea()时访问safeArea插图,swiftui,safearea,Swiftui,Safearea,正如您所看到的图片,我想将搜索栏精确地放置在安全区域的顶部,但是代理.safeAreaInsets没有正确的值,因为在预览提供程序中,父级使用边缘识别安全区域 我能做什么?有没有办法进入安全区域插图 struct FindView: View { // MARK: - Properties @ObservedObject var viewModel: FindViewModel init(viewModel: FindViewModel){ self.viewM

正如您所看到的图片,我想将搜索栏精确地放置在
安全区域的顶部,但是
代理.safeAreaInsets
没有正确的值,因为在
预览提供程序中,父级使用
边缘识别安全区域

我能做什么?有没有办法进入安全区域插图

struct FindView: View {
  
  // MARK: -  Properties
  @ObservedObject var viewModel: FindViewModel
  
  init(viewModel: FindViewModel){
    self.viewModel = viewModel

  }
  
  var body: some View {
 
      GeometryReader { proxy in
        ScrollView(.vertical, showsIndicators: true, content: {
          VStack(alignment: .leading, spacing: 8){
             SearchBar()
              .frame(height: 48, alignment: .center)
              .padding(.all, 16)
              
            
            Text("Categories")
              .multilineTextAlignment(.leading)
              .font(.system(size: 21))
              .padding(.all, 16)
              
          }.frame(width: proxy.size.width)
        })
      }
  }
}

struct FindView_Previews: PreviewProvider {
  static var previews: some View {
    ZStack(alignment: .center, content: {
      Rectangle().foregroundColor(.red)
      FindView(viewModel: FindViewModel())
    }).edgesIgnoringSafeArea(.all)
  }
}


您应该仅将
.edgesIgnoringSafeArea(.all)
应用于矩形,而不是ZStack。这样,只有它才能填满屏幕,而其他一切都保持不变

然后,为了使
FindView
填充屏幕(关于安全区域),您需要使用
.frame(maxWidth:.infinity,maxHeight:.infinity)扩展其框架


代码示例:

struct ContentView:View{
var body:一些观点{
ZStack{
矩形()
.填充(颜色.红色)
.edgesIgnoringSafeArea(.all)
文本(“这应尊重安全区域”)
.frame(maxWidth:.infinity,maxHeight:.infinity,对齐方式:.top)
}
}
}
简单的方法

     struct test: View {
          var body: some View {
              VStack{
                Text("Your view comes here")
                Spacer()
              }
               .frame(minWidth:0, maxWidth: .infinity, minHeight: 0,maxHeight: .infinity, alignment: .center)
               .padding(.top,UIApplication.shared.windows.first?.safeAreaInsets.top ?? 40)
               .background(Color.red)
               .edgesIgnoringSafeArea(.all)
          }
      }