【问题标题】:Hide/show views on button tap - SwiftUI [duplicate]隐藏/显示按钮点击视图 - SwiftUI [重复]
【发布时间】:2021-02-12 05:42:52
【问题描述】:

我有一个视图,在另一个文件中单独创建,我想在按下按钮时有条件地显示和隐藏。

我尝试了几种技术,例如根据布尔值更改不透明度或偏移量,但是一旦我将视图放入另一个 SwiftUI 文件中,它就不起作用了。

我的项目如下所示:

在 ContentView.swift 中,var body: some View

@State var doIWantThisViewToShow: Bool = false

MyView()
        .padding()
        .opacity(doIWantThisViewToShow ? 1 : 0)

在 MyView.swift 中

struct MyView: View {
    var body: some View {
        Text("Text")
    }
}

提前致谢!

【问题讨论】:

  • 关于doIWantThisViewToShow的一切都在哪里?
  • 我尽量缩短提到的代码,但是是的,我忘了提到@State var doIWantThisViewToShow

标签: ios swift view swiftui hide


【解决方案1】:

除了pawello的答案,你可以像这样隐藏它:

MyView()
  .hidden($doIWantThisViewToShow)

有了这个简单的扩展

extension View {
    @ViewBuilder func hidden(_ shouldHide: Bool) -> some View {
        switch shouldHide {
        case true: self.hidden()
        case false: self
        }
    }
}

【讨论】:

    【解决方案2】:

    您可以以不同的方式显示/隐藏您的视图。以下是一些可能对您有所帮助的内容:

    1. opacity(隐藏视图保留在视图层次结构中,即其他视图保持其位置):

      struct ContentView: View {
          @State var doIWantThisViewToShow: Bool = false
      
          var body: some View {
              VStack {
                  Button("Show/Hide MyView") {
                      doIWantThisViewToShow.toggle()
                  }
                  MyView()
                      .padding()
                      .opacity(doIWantThisViewToShow ? 1 : 0)
              }
          }
      }
      
    2. if-statement(隐藏视图从视图层次结构中移除,即其他视图位置将重新排列):

      struct ContentView: View {
          @State var doIWantThisViewToShow: Bool = false
      
          var body: some View {
              VStack {
                  Button("Show/Hide MyView") {
                      doIWantThisViewToShow.toggle()
                  }
                  if doIWantThisViewToShow {
                      MyView()
                          .padding()
                  }
              }
          }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多