代码之家  ›  专栏  ›  技术社区  ›  matteo94

显示基于状态的披露组视图

  •  0
  • matteo94  · 技术社区  · 4 年前

    我是SwiftUI的新手,遇到以下问题时,我很难理解。我有一个切换状态属性的按钮,我想显示 DisclosureGroup 当按钮的状态为“打开”时。出于某种原因,我可以用下面的代码显示任何类型的视图,除了 披露组 :

    @Binding var showing : Bool
    @Binding var revealDetails : Bool
    
    var body: some View {
        
        if showing {
            
            VStack {
                DisclosureGroup("Monday", isExpanded: $revealDetails){
                        Text("7PM - 10PM").frame(height: 100)
                    }
                .frame(width: 150)
                    .buttonStyle(PlainButtonStyle()).accentColor(.black)
                    
            }
        }
    
    }
    

    }

    当我在我的 ContentView 然而,奇怪的是,如果我在DisclosureGroup上面添加某种空视图,它确实有效。所以现在,我要包括一个 Text("") 里面 VStack .你有什么想法吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Umair Khan    4 年前

    Preview Picture

    我认为您没有向绑定传递正确的值,我可以在ContentView中看到您的代码后清楚地告诉您,因为您在问题中没有附加代码,但您可以复制粘贴到代码下面,并根据需要进行自定义。

    ContentView

    import SwiftUI
    
    struct ContentView: View {
        
        // MARK: - PROPERTIES
        
        @State private var showDiscloureGroup = false
        @State private var showDetails = false
        
        // MARK: - BODY
        
        var body: some View {
            VStack{
                Toggle("Show Disclosure Group", isOn: $showDiscloureGroup)
                Toggle("Show Details", isOn: $showDetails)
                
                MyDiscloureGroup(showing: $showDiscloureGroup, revealDetails: $showDetails)
            }//: VSTACK
            .padding()
        }
    }
    
    // MARK: - PREVIEW
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    

    MyDiscloureGroupView

    import SwiftUI
    
    struct MyDiscloureGroupView: View {
        
        @Binding var showing : Bool
        @Binding var revealDetails : Bool
    
        
        var body: some View {
            if showing {
                VStack {
                    DisclosureGroup("Monday", isExpanded: $revealDetails){
                            Text("7PM - 10PM").frame(height: 100)
                        }
                    .frame(width: 150)
                        .buttonStyle(PlainButtonStyle()).accentColor(.black)
                }
            }
        }
    }
    
    struct MyDiscloureGroup_Previews: PreviewProvider {
        static var previews: some View {
            MyDiscloureGroupView(showing: .constant(true), revealDetails: .constant(true))
        }
    }