A sheet helps people perform a distinct task that’s related to the parent view without taking them away from their current context. For example, Mail uses a sheet to help people compose an email without leaving their mailboxes, and Translate uses a sheet to display a dictionary view that helps people define the word they want to translate.
For developer guidance, see UISheetPresentationController.
A sheet appears as a card that partially covers the underlying content. The card’s top corners are rounded to visually distinguish it from the parent view. You can customize a sheet’s corner radius to coordinate with the corner radii you use elsewhere in your app; for developer guidance, see preferredCornerRadius.
People typically expect to resize a sheet when they scroll its contents or drag the grabber, which is a small horizontal indicator that can appear at the top edge of a sheet. In iOS 15 and later, sheets resize according to their detents, which are particular heights at which a sheet naturally rests. The system defines two detents: large is the height of a fully expanded sheet and medium is about half the fully expanded height.
Sheets automatically support the large detent. Adding the medium detent allows the sheet to rest at both heights, whereas specifying only medium prevents the sheet from expanding to full height. For developer guidance, see detents.
By default, a sheet is modal, presenting a focused experience that dims the parent view and prevents interaction with it. After people finish interacting with a modal sheet, they dismiss it — or it dismisses automatically — before resuming their task in the parent view. In iOS 15 and later, a sheet can also be nonmodal. When a nonmodal sheet is onscreen, people can continue their task in the parent view while also interacting with the sheet.
Use a sheet for nonimmersive content and simple tasks. A sheet allows part of the parent view to remain visible behind it, helping people retain their original context as they interact with the sheet. Use a full-screen modal presentation to offer immersive content such as videos, photos, or camera views, or to enable a complex task such as marking up a document or editing a photo. The full-screen modal style covers the entire screen, minimizing visual distraction. For developer guidance, see UIModalPresentationStyle.fullScreen.
Consider supporting the medium detent to allow progressive disclosure of the sheet’s content. For example, a share sheet displays the most relevant items within the medium detent, where they’re visible without resizing. To view more items, people can scroll or expand the sheet.
Use a nonmodal sheet when you want to present supplementary items people can use without pausing the main task. When people choose an item in a nonmodal sheet, the parent view can update in response, providing feedback on the item’s effect and letting people continue their task while the sheet remains onscreen. For example, Notes uses a nonmodal sheet to help people apply different formatting to different text selections as they edit a note. To enable a nonmodal sheet experience, you support the medium detent and remove dimming from the parent view (for developer guidance, see largestUndimmedDetentIdentifier).
In general, include a grabber in a resizable sheet. A grabber shows people that they can drag the sheet to resize it; they can also tap it to cycle through the detents. In addition to providing a visual indicator of resizability, a grabber also works with VoiceOver so people can resize the sheet without seeing the screen. For developer guidance, see prefersGrabberVisible.
Don’t display a sheet on top of a popover. Although you can display a sheet within a popover, nothing should appear on top of a popover (except possibly an alert). In rare cases when you need to present a sheet after people take an action in a popover, close the popover before displaying the sheet.