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 以不同的方式查看。以下是一些可能对您有所帮助的内容:
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
}
}
}
我有一个在另一个文件中单独创建的视图,我想在按下按钮时有条件地显示和隐藏它。
我尝试了几种技术,例如根据布尔值更改不透明度或偏移量,但是一旦我将视图放入另一个 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 以不同的方式查看。以下是一些可能对您有所帮助的内容:
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
}
}
}