SwiftUI presentationMode: 检查视图是否由sheet呈现

5

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

  1. 在一个视图中,使用navigationLink
NavigationLink(destination: LoginView()) {
  Text(“To login")
 }
  1. 在B视图中,使用.sheet
.sheet(isPresented: $viewModel.isShowingSheet) {
    LoginView()
}

LoginView中,如果以表格形式呈现,则想要显示Banner,因此使用了presentationMode。

struct LoginView: View {
    
    @Environment(\.presentationMode) var presentationMode
    
    var body: some View {
        if presentationMode.wrappedValue.isPresented {
            Banner()
        }
    }
}

但是横幅在导航链接和表格中都显示。

有没有好的方法可以检查视图是否由表格呈现?还是我必须使用自己的属性注入演示样式?

1个回答

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

明确地告诉视图何时显示某些内容并没有错,而不是让视图费力决定要显示什么。这种明确性使得测试视图更加容易。


好的,我只是想知道是否有环境属性可以检查它是作为表格还是导航呈现。谢谢你的回答,我会使用额外的showBanner属性! - naljin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接