MFMailComposeViewController has incorrect navigation bar behavior when presented from SwiftUI

I'm seeing two related UI issues when presenting MFMailComposeViewController from SwiftUI using .sheet.

The Cancel button disappears

During the sheet presentation animation, the Cancel button is visible in the navigation bar. However, once the presentation animation completes, the Cancel button disappears.

This is particularly problematic when the mail composer is presented full-screen: since the Cancel button is removed, there is no longer any way for the user to cancel composing the email and dismiss MFMailComposeViewController.

The navigation bar changes abruptly when the presentation animation finishes

The navigation bar has one appearance while the sheet is being presented, including the Cancel button and the layout/styling of its navigation items.

As soon as the presentation animation finishes, the navigation bar abruptly changes to a different appearance. This causes a noticeable flicker/jump at the end of the animation.

In other words, the appearance of MFMailComposeViewController during the sheet transition does not match its final appearance after the transition completes.

The sample code below reproduces the issue.

Steps to reproduce:

Run the sample on an iPad Pro 13-inch (M5) running iPadOS 26.5. Present MFMailComposeViewController using the provided SwiftUI .sheet. Observe the navigation bar during the presentation animation. When the animation completes, observe that the navigation bar changes abruptly and the Cancel button disappears.

Is this a known issue with MFMailComposeViewController when presented from SwiftUI using .sheet?

struct ContentView: View {

    @State private var isMailComposerPresented = false
    var body: some View {
        VStack {
            Button("Send") {
                isMailComposerPresented = true
            }
            .buttonStyle(.borderedProminent)
        }
        .sheet(isPresented: $isMailComposerPresented) {
            MailComposerView()
        }
    }
}

struct MailComposerView: UIViewControllerRepresentable {
    @Environment(\.dismiss) private var dismiss
    func makeUIViewController(context: Context) -> MFMailComposeViewController {
        let composer = MFMailComposeViewController()
        composer.mailComposeDelegate = context.coordinator
        return composer
    }

    func updateUIViewController(_ uiViewController: MFMailComposeViewController, context: Context) {}

    func makeCoordinator() -> Coordinator {
        Coordinator(dismiss: dismiss)
    }

    final class Coordinator: NSObject, MFMailComposeViewControllerDelegate {
        private let dismiss: DismissAction
        init(dismiss: DismissAction) {
            self.dismiss = dismiss
        }

        func mailComposeController(
            _ controller: MFMailComposeViewController,
            didFinishWith result: MFMailComposeResult,
            error: Error?
        ) {
            dismiss()
        }
    }}
MFMailComposeViewController has incorrect navigation bar behavior when presented from SwiftUI
 
 
Q