Using a UISheetPresentationController in SwiftUI

This article explores how you can create a layered and customized sheet experience in SwiftUI.

Using a UISheetPresentationController in SwiftUI

During WWDC 2021 Apple has announced a new way to create a layered and customized sheet experience in UIKit. This is possible using a new UIPresentationController subclass called UISheetPresentationController.

Some system apps (Notes, Maps, Newsroom, Mail) make use of the UISheetPresentationController.

If you want to know more about it check out the following session from WWDC 2021 which talks about how we can build a non-modal experience in our app to allow interaction with content both in a sheet and behind the sheet at the same time.

Customize and resize sheets in UIKit - WWDC21 - Videos - Apple Developer
Discover how you can create a layered and customized sheet experience in UIKit. We’ll explore how you can build a non-modal experience in...

UIKit now supports medium/large detents, which allows you to create a vertically resizable sheet that only covers half the screen. This is why it is often referred to as half-modal or full-modal. if you want to know more about detens have a look at Apple’s documentation.

Apple Developer Documentation

SwiftUI currently provides only one way to achieve a modal experience. sheet(isPresented:onDismiss:content:) is a view modifier that presents a sheet with a large detent only when a given condition is true. What we would like instead is to use the UIKit exclusive medium detent in our SwiftUI apps.

Let's have a look. Become a free member or log in to proceed.