swift - 在 SwiftUI 中动态隐藏 View

标签 swift swiftui

我正在尝试有条件地隐藏 DatePicker在 SwiftUI 中。但是,我对不匹配的类型有任何疑问:

var datePicker = DatePicker($datePickerDate)
if self.showDatePicker {
    datePicker = datePicker.hidden()
}

在这种情况下,datePickerDatePicker<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/

相关文章:

ios - 从 xib 加载 uitableviewcell 的 View 与 dequeuereusablecellwithidentifier 方法有何不同?

ios - Swift 3 - 从不同的 View Controller 过滤 TableView

ios - 3D模型无法在iOS的ARCore Augmented Faces中渲染

带有 .fill ContentMode 的 SwiftUI AsyncImage 覆盖 ZStack iOS-17 中的按钮

swiftui - 在 SwiftUI 中,将 subview 放在函数中而不是结构体中是否有问题?

swift - 自定义 View 不会使用通过绑定(bind)提供的状态变量更新,但调试监视会显示更改

swiftui - 不符合协议(protocol) BindableObject - Xcode 11 Beta 4

ios - SwiftUI使用Charts创建RadarChart并希望实时更新RadarChartDataEntry

function - 返回一个函数 vs 返回一个闭包

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?