正如您所看到的图片,我想将搜索栏恰好放置在 的顶部,safeArea但proxy.safeAreaInsets没有正确的值,因为在PreviewProvider父级中使用edgesIgnoringSafeArea。
我能做些什么 ?有什么方法可以访问 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)
}
}
Run Code Online (Sandbox Code Playgroud)
您应该.edgesIgnoringSafeArea(.all)仅将其应用于矩形,而不是 ZStack。这样,只有它应该填满屏幕,而其他所有内容都保持在原位。
然后,为了使其FindView填充屏幕(尊重安全区域),您需要使其框架延伸.frame(maxWidth: .infinity, maxHeight: .infinity)
代码示例:
struct ContentView: View {
var body: some View {
ZStack {
Rectangle()
.fill(Color.red)
.edgesIgnoringSafeArea(.all)
Text("This should respect the safe area")
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |