SwiftUI:根据属性值设置视图可见性?

Posted

技术标签:

【中文标题】SwiftUI:根据属性值设置视图可见性?【英文标题】:SwiftUI: Setting View visibility based on a property value? 【发布时间】:2019-10-07 20:22:32 【问题描述】:

使用 SwiftUI 定义视图层次结构时,是否可以在定义主体中设置视图的 hidden() 值?

例如:

var body: some View 
     VStack(alignment: .leading) 
          Text(self.name)
          .font(.headline)
          .hidden()
     

会隐藏 Text 对象,但我想使用布尔属性来切换可见性。

有一种方法可以使用三元运算符和视图的不透明度值,但我希望有一个不那么聪明的解决方案。

谢谢!

【问题讨论】:

如果您的意思是“隐藏”,如从层次结构(和布局)中删除,那么 if <your_condition> <your_view_here 就是您所需要的...顺便说一句,您的属性的三元组没有问题,就是这样Apple 也在他们的示例中使用。 【参考方案1】:

如果您不想以这种方式使用opacity 修饰符:

struct ContentView: View 
    @State private var showText = true

    var body: some View 
         VStack(alignment: .leading) 
              Text("Hello world")
                .font(.headline)
                .opacity(showText ? 1 : 0)
         
    

您可以有条件地决定完全删除视图:

struct ContentView: View 
    @State private var showText = true

    var body: some View 
         VStack(alignment: .leading) 
            if showText 
                Text("Hello world")
                    .font(.headline)
            
         
    

考虑到这两种方式都在SwiftUI 中广泛使用。对于您的具体情况,我会诚实地使用 opacity 修饰符,但即使删除也可以。

【讨论】:

以上是关于SwiftUI:根据属性值设置视图可见性?的主要内容,如果未能解决你的问题,请参考以下文章

iOS10 UI教程视图和子视图的可见性

如何将 StackPane 的可见性绑定到属性?

将 XAML 中的可见性绑定到可见性属性

如何将图像视图的可见性设置为 Spinner 所选项目的可见性

基于布尔值的 ListView 项目可见性

使用数据绑定设置视图可见性