[英]SwiftUI presentationMode: Check if view is presented by sheet
有两种方法可以在我的代码中显示 LoginView
NavigationLink(destination: LoginView()) {
Text(“To login")
}
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView()
}
在LoginView
,如果LoginView
显示为工作表,我想显示我的Banner
,所以我使用了presentationMode。
struct LoginView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
if presentationMode.wrappedValue.isPresented {
Banner()
}
}
}
但是在两种情况下都显示横幅(导航链接和工作表)
检查视图是否按工作表显示有什么好方法吗? 或者我是否必须使用我自己的属性来注入演示风格?
为什么在创建 LoginView 时不直接传入值?
struct LoginView: View {
var showBanner = false
@Environment(\.presentationMode) var presentationMode
var body: some View {
if showBanner {
Banner()
}
}
}
当您将其称为工作表演示文稿时:
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView(showBanner: true)
}
如果你从其他任何地方传递它,用 false 初始化它。
NavigationLink(destination: LoginView(showBanner: false)) {
Text(“To login")
}
明确并告诉视图何时显示某些内容并没有错,而不是让视图通过额外的箍来决定显示什么。 这种明确性使得测试视图变得更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.