问题描述
我有一个视图,它是在另一个文件中单独创建的,我想在按下按钮时有条件地显示和隐藏它。
我尝试了多种技术,例如根据布尔值更改不透明度或偏移量,但是一旦将视图放置到另一个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")
}
}
谢谢!
解决方法
您可以用不同的方式显示/隐藏视图。以下是一些可以帮助您的内容:
-
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) } } }
-
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
}
}
}