This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
BottomSheet
A SwiftUI BottomSheet component that presents content from the bottom of the screen.
For cross-platform usage, see the universal
BottomSheet— it renders the appropriate native component per platform.
Expo UI BottomSheet matches the official SwiftUI sheet API and presents content from the bottom of the screen.


Installation
If you are installing this in an existing React Native app, make sure to install expo in your project.
Usage
Basic bottom sheet
Pass the control that opens the sheet as the anchor prop. The children are the sheet's content.
React Native view as an anchor
The anchor can be a React Native view. Wrap it in RNHostView.
Bottom sheet that fits content
Use the fitToContents prop to automatically size the sheet to fit its content.
Custom background color
By default, a sheet uses the system's translucent material background (Liquid Glass on iOS 26). Use the presentationBackground modifier on Group to paint the sheet with a solid color instead, which also opts the sheet out of that translucent material.
Prefer
presentationBackgroundover abackgroundmodifier on the sheet's content. Abackgroundsits behind the content's own background, so aFormorListcovers it, and the color shows inconsistently as the sheet moves between detents.presentationBackgroundcolors the sheet surface itself, so it stays consistent at every detent. When the content is aFormorList, also addscrollContentBackground('hidden')so the sheet color shows through the grouped background.
Bottom sheet with presentation detents
Use the presentationDetents modifier on Group to control the available heights. You can use:
'medium': System medium height (approximately half screen)'large': System large height (full screen){ fraction: number }: Fraction of screen height (0-1){ height: number }: Fixed height in points
Bottom sheet with detent selection tracking
Pass selection and onSelectionChange options to presentationDetents to programmatically control which detent the sheet snaps to.
Bottom sheet with background interaction
Use the presentationBackgroundInteraction modifier to allow interactions with content behind the sheet.
Non-dismissible bottom sheet
Use the interactiveDismissDisabled modifier to prevent users from dismissing the sheet by swiping.
Bottom sheet with React Native content
Use RNHostView to embed React Native components inside the bottom sheet. Set matchContents to automatically size the host view to fit its content.
Bottom sheet with flexible React Native content
When using React Native content with flex: 1, omit the matchContents prop on RNHostView and use presentationDetents to control the sheet height.
Scrollable React Native content
Nest a scrollable React Native list such as FlatList, ScrollView, or a high-performance list like FlashList or Legend List inside the sheet with RNHostView. Size the sheet with presentationDetents and the list scrolls within that height.
API
import { BottomSheet } from '@expo/ui/swift-ui';
Component
Type: React.Element<BottomSheetProps>
BottomSheet presents content from the bottom of the screen.
ReactNodeA view the sheet is anchored to, for example the Button that opens it. Rendered in place and
kept mounted, so presenting the sheet doesn't shift surrounding layout. Optional.
ReactNodeThe sheet's content, mounted while presented and unmounted after dismiss. Wrap it in Group
to apply presentation modifiers.
boolean • Default: falseWhen true, the sheet will automatically size itself to fit its content.
This sets the presentation detent to match the height of the children.
() => voidCallback function that is called after the BottomSheet has been fully dismissed.
(isPresented: boolean) => voidCallback function that is called when the BottomSheet presented state changes.