.disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices

[Also submitted as FB19313064]

The .disabled() modifier doesn't visually disable buttons inside a ToolbarItem container on iOS 26.0 (23A5297i) devices. The button looks enabled, but tapping it doesn't trigger the action.

When deployment target is lowered to iOS 18 and deployed to an iOS 18 device, it works correctly. It still fails on an iOS 26 device, even with an iOS 18-targeted build.

This occurs in both the Simulator and on a physical device.

Screen Recording

Code


struct ContentView: View {
    @State private var isButtonDisabled = false

    private var osTitle: String {
        let version = ProcessInfo.processInfo.operatingSystemVersion
        return "iOS \(version.majorVersion)"
    }

    var body: some View {
        NavigationStack {
            VStack {
                Button("Body Button") {
                    print("Body button tapped")
                }
                .buttonStyle(.borderedProminent)
                .disabled(isButtonDisabled)

                Toggle("Disable buttons", isOn: $isButtonDisabled)
                Spacer()
            }
            .padding()
            .navigationTitle("Device: \(osTitle)")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem {
                    Button("Toolbar") {
                        print("Toolbar button tapped")
                    }
                    .buttonStyle(.borderedProminent)
                    .disabled(isButtonDisabled)
                }
            }

        }
    }
}

Thanks for the bug report. Could you try applying a plain or different buttonStyle

Changing to .plain, does make make the .disabled() modifier work on an iOS 26 device (toolbar button visually becomes "grayed out"):

But I’m trying to match the behavior of stock iOS 26 apps like Reminders and Calendar, where the checkmark/save button is disabled when there are no changes, then .borderedProminent when there are.

What's the best way to do this? 👇

Reminders on iOS 26

Calendar on iOS 26

The following code works for me:

Button {
    print("Toolbar button tapped")
} label: {
    Label("Checkmark", systemImage: "checkmark")
}
.buttonStyle(.borderedProminent)
.disabled(isButtonDisabled)

That your way of creating the button doesn't work is probably worth a feedback report though.

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

Thanks for the reply.

Even with that button declaration, it still won't work when the label: closure contains a Text() element like this:

Code

Button {
    print("Checkmark button tapped")
} label: {
    Text("Checkmark")
}
.buttonStyle(.borderedProminent)
.disabled(isButtonDisabled)

Recording

As I mentioned in my original post, I already filed this as FB19313064. But I’ll update the report to clarify that it only affects buttons that don’t use the label: closure with a Label() element.

.disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
 
 
Q