I’ve been developing an app which uses MFMailComposeViewController to send precomposed emails. I’ve been using the same presentation method for ages (at least 10 years) but on iPads, since a couple of iOS versions, the Cancel (‘X’) button is not shown anymore in the navigation bar, so the users cannot exit the ‘Send mail’ dialog (except by sending the email, or killing the app).
- Everything is updated to the latest OS and Xcode versions (26.5)
- iPhones are not affected, it only occurs on iPads.
- An old iPad with iOS 16.7, with a recent TestFlight version of the app, still shows a button with the word ‘Cancel’ on the top left, even if I do a fresh install from Xcode. Unlike iOS 26, the ‘Send’ button (an icon, just like iOS 26) and title are horizontally aligned, and the ‘Cancel’ button is shown above both of them.
My workaround is to use UIModalPresentationPageSheet which still doesn’t show a cancel button, but does allow to cancel the dialog by tapping outside of it.
To reproduce, create a new Project with interface Storyboard, language Objective-C.
Change ViewController.h so that it implements the mail compose delegate and knows how to receive a button click:
@interface ViewController : UIViewController <MFMailComposeViewControllerDelegate>
- (IBAction)buttonClicked:(id)sender;
@end
In the storyboard, add an UIButton with event touchUpInside linked to buttonClicked.
Inside ViewController.m, add this:
- (IBAction)buttonClicked:(id)sender {
MFMailComposeViewController *mailComposer = [MFMailComposeViewController new];
mailComposer.mailComposeDelegate = self;
mailComposer.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:mailComposer animated:YES completion:NULL];
}
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error {
[self dismissViewControllerAnimated:YES completion:NULL];
}
(if you don’t set mailComposeDelegate, the X button will still show on iPhone but don’t do anything)
iPhone screenshot:
iPad screenshot:
(FWIW, I went into a debugging session with an AI model; it suggested me half a dozen things to try, being confident that it found the real issue at every step, but none of its suggestions worked. I doubt it’s worth sharing, it finally seemed to agree "that this is a bug introduced in the iOS 26 layout engine.")


