DisclosureGroupStyle
A type that specifies the appearance and interaction of disclosure groups within a view hierarchy.
Declaration
@MainActor @preconcurrency protocol DisclosureGroupStyleOverview
To configure the disclosure group style for a view hierarchy, use the disclosureGroupStyle(_:) modifier.
To create a custom disclosure group style, declare a type that conforms to DisclosureGroupStyle. Implement the makeBody(configuration:) method to return a view that composes the elements of the configuration that SwiftUI provides to your method.
struct MyDisclosureStyle: DisclosureGroupStyle {
func makeBody(configuration: Configuration) -> some View {
VStack {
Button {
withAnimation {
configuration.isExpanded.toggle()
}
} label: {
HStack(alignment: .firstTextBaseline) {
configuration.label
Spacer()
Text(configuration.isExpanded ? "hide" : "show")
.foregroundColor(.accentColor)
.font(.caption.lowercaseSmallCaps())
.animation(nil, value: configuration.isExpanded)
}
.contentShape(Rectangle())
}
.buttonStyle(.plain)
if configuration.isExpanded {
configuration.content
}
}
}
}A type conforming to this protocol inherits @preconcurrency @MainActor isolation from the protocol if the conformance is included in the type’s base declaration:
struct MyCustomType: Transition {
// `@preconcurrency @MainActor` isolation by default
}Isolation to the main actor is the default, but it’s not required. Declare the conformance in an extension to opt out of main actor isolation:
extension MyCustomType: Transition {
// `nonisolated` by default
}