在按钮点击时隐藏/显示视图-SwiftUI

时间:2020-10-29 18:10:24

标签: ios swift view swiftui hide

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

我尝试了多种技术,例如根据布尔值更改不透明度或偏移量,但是一旦将视图放置到另一个SwiftUI文件中,该方法将无效。

我的项目如下:

在ContentView.swift中的 var体内:某些视图

@State var doIWantThisViewToShow: Bool = false

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

在MyView.swift中

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

谢谢!

2 个答案:

答案 0 :(得分: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()
                }
            }
        }
    }
    

答案 1 :(得分:1)

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

MyView()
  .hidden($doIWantThisViewToShow)

使用这个简单的扩展

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