SwiftUI presentationMode:检查视图是否由 sheet 呈现
SwiftUI presentationMode: Check if view is presented by sheet
在我的代码中有两种方式显示LoginView
- 在 A 视图中,使用 navigationLink
NavigationLink(destination: LoginView()) {
Text(“To login")
}
- 在 B 视图中,使用 .sheet
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView()
}
并且在 LoginView
中,如果 LoginView
显示为 sheet,我想显示我的 Banner
,所以我使用了 presentationMode。
struct LoginView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
if presentationMode.wrappedValue.isPresented {
Banner()
}
}
}
但横幅在两种情况下都显示(导航 link 和 sheet)
检查视图是否由 sheet 呈现有什么好方法吗?或者我是否必须使用我自己的 属性 注入演示文稿样式?
为什么不在创建 LoginView 时直接传入值?
struct LoginView: View {
var showBanner = false
@Environment(\.presentationMode) var presentationMode
var body: some View {
if showBanner {
Banner()
}
}
}
当您将其称为 sheet 演示文稿时:
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView(showBanner: true)
}
如果您从其他任何地方传递它,请将其初始化为 false。
NavigationLink(destination: LoginView(showBanner: false)) {
Text(“To login")
}
明确告诉视图何时显示某些内容并没有错,而不是让视图通过额外的步骤来决定显示什么。而且这种明确性使得测试视图变得更加容易。
在我的代码中有两种方式显示LoginView
- 在 A 视图中,使用 navigationLink
NavigationLink(destination: LoginView()) {
Text(“To login")
}
- 在 B 视图中,使用 .sheet
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView()
}
并且在 LoginView
中,如果 LoginView
显示为 sheet,我想显示我的 Banner
,所以我使用了 presentationMode。
struct LoginView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
if presentationMode.wrappedValue.isPresented {
Banner()
}
}
}
但横幅在两种情况下都显示(导航 link 和 sheet)
检查视图是否由 sheet 呈现有什么好方法吗?或者我是否必须使用我自己的 属性 注入演示文稿样式?
为什么不在创建 LoginView 时直接传入值?
struct LoginView: View {
var showBanner = false
@Environment(\.presentationMode) var presentationMode
var body: some View {
if showBanner {
Banner()
}
}
}
当您将其称为 sheet 演示文稿时:
.sheet(isPresented: $viewModel.isShowingSheet) {
LoginView(showBanner: true)
}
如果您从其他任何地方传递它,请将其初始化为 false。
NavigationLink(destination: LoginView(showBanner: false)) {
Text(“To login")
}
明确告诉视图何时显示某些内容并没有错,而不是让视图通过额外的步骤来决定显示什么。而且这种明确性使得测试视图变得更加容易。