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)
}
}