gpt4 book ai didi

ios - SwiftUI 演示模式 : Check if view is presented by sheet

转载 作者:行者123 更新时间:2023-12-04 07:22:15 28 4
gpt4 key购买 nike

在我的代码中有两种方式显示LoginView

  1. 在A View 中,使用navigationLink
NavigationLink(destination: LoginView()) {
Text(“To login")
}
  1. 在B View 中,使用.sheet
.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()
}
}
}

但横幅在两种情况下都显示(导航链接和工作表)

有没有什么好的方法来检查 View 是否由工作表呈现?还是我必须使用我自己的属性注入(inject)演示样式?

最佳答案

为什么不在创建 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")
}

明确告诉 View 何时显示某些内容并没有错,而不是让 View 通过额外的环节来决定显示什么。这种明确性使得测试 View 变得更加容易。

关于ios - SwiftUI 演示模式 : Check if view is presented by sheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68419684/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com