Hide/show 按钮点击次数 - SwiftUI

Hide/show views on button tap - SwiftUI

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

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

我的项目是这样的:

In ContentView.swift, inside 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")
    }
}

提前致谢!

您可以 show/hide 以不同的方式查看。以下是一些可能对您有所帮助的内容:

  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()
                }
            }
        }
    }
    

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

MyView()
  .hidden($doIWantThisViewToShow)

有了这个简单的扩展

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