Modals and Safari
Present pages as sheets, full-screen flows, popovers, and in-app web content.
Modal navigation uses the same registered ViewModel and view forms as stack navigation:
The navigation stacks guide covers the matching push and pop forms.
Dismiss the top presentation with DismissAsync(). A modal page's ConfirmLeave callback also applies to swipe-to-dismiss sheets and tapping outside popovers.
A presented page owns a navigation stack. Calls to PushAsync and PopAsync while it is visible stay inside that modal; use DismissAsync to remove the modal itself.
Presentation styles
Automaticlets UIKit choose.Sheet(...)creates an interactive page sheet.FullScreencovers the screen and unloads the background presentation.FormSheetis a centered card on iPad and a full sheet on iPhone.CurrentContextstays inside the current presentation context.OverFullScreenandOverCurrentContextkeep the covered content loaded.Popover(anchor)points at a SkeleKit view on large displays and adapts on compact displays.
Use PresentViewAsync to present a registered or existing view directly.
Sheet detents
Pass detents from smallest to largest. The sheet opens at the first:
Detent.Medium and Large use the system heights. Content follows the page's measured content and visible navigation chrome, updating when layout changes. Fixed heights are clamped to available space; fractions must be greater than zero and no greater than one.
On iOS 27, pass a placement before the detents to position the sheet within a wide presenting view:
Automatic lets UIKit choose; Leading and Trailing follow the interface's language direction, and Center explicitly centers the sheet. Compact sheets may remain full-width, and earlier iOS versions ignore the placement.
In-app Safari
OpenUrlAsync uses SFSafariViewController for an HTTP or HTTPS address:
The extended overload controls presentation, Reader mode, collapsing browser bars, and whether the dismiss button reads Close, Done, or Cancel. Content-sized detents are treated as full height because Safari owns its internal content measurement.
Use the platform launcher directly for schemes or handoffs that do not belong in the in-app browser.
Use WebView instead when web content must remain embedded inside the page layout rather than appearing as a browser presentation.