Geoff Hackworth
2 min readOct 2, 2019

--

Hi John,

I was referring to using the `userInterfaceIdiom` property of `UIDevice.currentDevice`. That’s an easy way to distinguish between iPhone and iPad but is not really been a good basis for decision making when iPad apps can change size due to split-screen multitasking or Slide Over. As you’ve hinted, the horizontal size class is a better test.

However, making a one time decision for the presentation style based on the size class before the presentation might not behave as you want for apps which can change size whilst the view controller is presented. That can happen on iPad due to multitasking but also happens on the iPhone plus and Max devices in landscape (which are regular width).

Before iOS 13, I would usually always use a form sheet presentation (on all device types) and just rely on default behaviour to adapt to full screen in compact width environments. The plus size iPhones would show a form sheet, and not full screen, in landscape because they change to regular width.

As you know, iOS 13 changes presentations a lot! The default is now a card-like appearance that doesn’t fill the screen. It adapts to full screen on landscape iPhones, even the largest ones which used to show non-full-screen form/page sheets on earlier iOS versions if the initial modal presentation style was form/page sheet.

I haven’t tried it myself, but as I said in the article, I think it should be possible to force full screen in compact width environments using the UIAdaptivePresentationControllerDelegate method you mention. Maybe!

I think it will be called when the view controller is first presented (to allow an alternative style to be used) and on a trait collection change.

It looks like you want to show either form sheet or full screen depending on the horizontal size class. If you could get that delegate method working I think you would still need to set an initial form sheet presentation otherwise you would get full screen before iOS 13 (on all devices) and would get automatic on iOS 13 (which is a page sheet, not a form sheet, on iPad).

To be honest, trying to force full screen presentations on iOS 13 correctly could be pretty tricky for apps that need to support iPhone (especially landscape) and iPad multitasking, and use form sheets (not page sheet) on large iPad sizes.

In my apps, I chose to embrace the new iOS 13 card-like presentation and use isModalInPresentation to block the interactive dismissal where necessary. I still use form sheet for the initial presentation so that iPad uses a form sheet rather than the larger page sheet. A page sheet on iPad is a different size on iOS 12 and 13. On iOS 13 it also gets taller in portrait and the width will change depending on the dynamic type content size.

I think it’s probably going to be less work to not fight Apple’s design changes on iOS 13 instead of trying to force full screen presentations. Good luck!

--

--

Geoff Hackworth
Geoff Hackworth

Written by Geoff Hackworth

Independent and freelance software developer for iPhone, iPad and Mac

No responses yet