DisclosureGroup chevron no longer responds to tint color

I’m using a standard DisclosureGroup in SwiftUI and noticed that the disclosure indicator (chevron) no longer adopts the tint color.

Example:

DisclosureGroup("Details") {
    Text("Content")
}
.tint(.indigo)

The label text becomes indigo, but the chevron remains the default system color.

I also tried creating a custom DisclosureGroupStyle to render my own chevron, but that approach appears to break some of the built-in disclosure animation behavior and interaction.

Questions:

  1. Is there a supported way to customize the disclosure indicator color in DisclosureGroup?
  2. Has the behavior of .tint(_:) changed for DisclosureGroup in recent iOS releases?
  3. If customization is not currently supported, is there a recommended alternative that preserves the native disclosure animations and accessibility behavior?

Tested on: iOS 26.3 and Xcode 26.3

Answered by DTS Engineer in 889934022

Hello @ikeval,

DisclosureGroupStyle is a custom style you create explicitly - the animation isn’t automatic in a custom style.

You can drive the animation yourself with configuration.isExpanded

See isExpanded.

struct CustomDisclosureGroupStyle: DisclosureGroupStyle {
    func makeBody(configuration: Configuration) -> some View {
        VStack(alignment: .leading) {
            Button { configuration.isExpanded.toggle() } label: {
                HStack {
                    configuration.label
                    Spacer()
                    Image(systemName: "chevron.right")
                        .rotationEffect(.degrees(configuration.isExpanded ? 90 : 0))
                }
            }
            if configuration.isExpanded { configuration.content }
        }
    }
}

This will now tint the DisclosureGroup chevron:

DisclosureGroup("Details") {
    Text("Content")
}
.disclosureGroupStyle(CustomDisclosureGroupStyle())
.tint(.indigo)
  • Has the behavior of .tint(_:) changed for DisclosureGroup in recent iOS releases?

DisclosureGroup now uses the AccentColor by default - and with .accentColor being deprecated, .tint is the current approach to change the DisclosureGroup color. I confirmed the behavior you are seeing is expected here. Please use DisclosureGroupStyle to make a custom style, then the chevron will respond to tint color.

Thank you for your post!

 Travis

Hello @ikeval,

DisclosureGroupStyle is a custom style you create explicitly - the animation isn’t automatic in a custom style.

You can drive the animation yourself with configuration.isExpanded

See isExpanded.

struct CustomDisclosureGroupStyle: DisclosureGroupStyle {
    func makeBody(configuration: Configuration) -> some View {
        VStack(alignment: .leading) {
            Button { configuration.isExpanded.toggle() } label: {
                HStack {
                    configuration.label
                    Spacer()
                    Image(systemName: "chevron.right")
                        .rotationEffect(.degrees(configuration.isExpanded ? 90 : 0))
                }
            }
            if configuration.isExpanded { configuration.content }
        }
    }
}

This will now tint the DisclosureGroup chevron:

DisclosureGroup("Details") {
    Text("Content")
}
.disclosureGroupStyle(CustomDisclosureGroupStyle())
.tint(.indigo)
  • Has the behavior of .tint(_:) changed for DisclosureGroup in recent iOS releases?

DisclosureGroup now uses the AccentColor by default - and with .accentColor being deprecated, .tint is the current approach to change the DisclosureGroup color. I confirmed the behavior you are seeing is expected here. Please use DisclosureGroupStyle to make a custom style, then the chevron will respond to tint color.

Thank you for your post!

 Travis

DisclosureGroup chevron no longer responds to tint color
 
 
Q