我正在尝试有条件地隐藏 DatePicker
在 SwiftUI 中。但是,我对不匹配的类型有任何疑问:
var datePicker = DatePicker($datePickerDate)
if self.showDatePicker {
datePicker = datePicker.hidden()
}
在这种情况下,datePicker
是 DatePicker<EmptyView>
输入但 datePicker.hidden()
是 _ModifiedContent<DatePicker<EmptyView>, _HiddenModifier>
.所以我不能分配 datePicker.hidden()
至 datePicker
.我已经尝试过这种方法的变体,但似乎找不到可行的方法。有什么想法吗?
更新
您可以打开 _ModifiedContent
使用它的类型获取基础类型 content
属性(property)。但是,这并没有解决根本问题。 content
属性似乎只是原始的、未修改的日期选择器。
最佳答案
最简单和最常见的隐藏 View 的方法如下:
struct ContentView: View {
@State private var showText = true
var body: some View {
VStack {
Button("Toggle text") {
showText.toggle()
}
if showText {
Text("Hello World!")
}
}
}
}
当 showText
等于 false
时,这将从层次结构中删除 Text
View 。如果您希望有一个选项来保留空间或希望它作为修饰符,请参见下文。
我创建了一个扩展,所以你可以使用修饰符来隐藏 View :
Text("Hello World!")
.isHidden(true)
或完全删除:
Text("Label")
.isHidden(true, remove: true)
如果您想使用 Swift 包,下面的扩展也可以在 GitHub 上获得:GeorgeElsham/HidingViews .
下面是创建 View
修饰符的代码:
我建议您在自己的文件中使用此代码(记得import SwiftUI
):
extension View {
/// Hide or show the view based on a boolean value.
///
/// Example for visibility:
///
/// Text("Label")
/// .isHidden(true)
///
/// Example for complete removal:
///
/// Text("Label")
/// .isHidden(true, remove: true)
///
/// - Parameters:
/// - hidden: Set to `false` to show the view. Set to `true` to hide the view.
/// - remove: Boolean value indicating whether or not to remove the view.
@ViewBuilder func isHidden(_ hidden: Bool, remove: Bool = false) -> some View {
if hidden {
if !remove {
self.hidden()
}
} else {
self
}
}
}
关于swift - 在 SwiftUI 中动态隐藏 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56490250/