SwiftUI-如何优雅的实现折叠效果

462 阅读1分钟

DisclosureGroup

根据disclose控件的状态显示或隐藏另一个内容视图的视图。

struct DisclosureGroup<Label, Content> where Label : View, Content : View

使用教程

公开组视图由标识内容的标签和显示和隐藏内容的控件组成。 显示内容会使公开组处于“展开”状态,隐藏内容会使公开组“折叠”。

在以下示例中,公开组包含两个切换按钮和一个嵌入式公开组。 顶级公开组使用绑定属性topLevelExpanded公开其展开状态。 通过扩展公开组,用户可以使用切换按钮来更新toggleStates结构的状态。

示例代码

struct ContentView: View {
    
    struct ToggleStates {
        var oneIsOn: Bool = false
        var twoIsOn: Bool = true
    }
    @State private var toggleStates = ToggleStates()
    @State var selectedTab = 0
    @StateObject var pathManager = PathManager()
    var body: some View {
        List{
            DisclosureGroup("点击展开",isExpanded: $toggleStates.oneIsOn){
                Text("子菜单")
                
                DisclosureGroup("第二级:点击展开"){
                    Text("子菜单")
                    Text("子菜单")
                    Text("子菜单")
                }
            }
            DisclosureGroup("点击展开"){
                Text("子菜单")
                Toggle("toggle", isOn: $toggleStates.twoIsOn)
                DisclosureGroup("第二级:点击展开"){
                    Text("子菜单")
                    Text("子菜单")
                    Text("子菜单")
                }
            }   
        }
    }
}

效果示例图

image.png