繁体   English   中英

SwiftUIpresentationMode:检查视图是否按工作表呈现

[英]SwiftUI presentationMode: Check if view is presented by sheet

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

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

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

检查视图是否按工作表显示有什么好方法吗? 或者我是否必须使用我自己的属性来注入演示风格?

为什么在创建 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM