🚧 True Sheet 4.0 beta rewrites the layout engine. npx expo install @lodev09/react-native-true-sheet@beta Migration guide
Reference

Configuration

True Native Bottom Sheet configuration props.

Configuration props available for TrueSheet. Extends ViewProps.

<TrueSheet
  ref={sheet}
  detents={['auto', 0.8, 1]}
  backgroundColor="#696969"
  // ...
>
  <View />
</TrueSheet>

ref

We use ref to reference our sheet and call the imperative methods. Learn more about refs here.

detents

Array of detents you want the sheet to support. See this guide for example.

TypeDefaultπŸŽπŸ€–πŸŒ
SheetDetent[][0.5, 1]βœ…βœ…βœ…

A sheet can only support up to 3 detents only! AKA collapsed, half-expanded, and expanded.

It's recommended to sort detents from smallest to largest.

name

The name to reference this sheet. It has to be unique. You can then present this sheet globally using its name. See this guide for example.

TypeDefaultπŸŽπŸ€–πŸŒ
stringβœ…βœ…βœ…

backgroundColor

The sheet's background color. Uses the system default when not provided.

TypeDefaultπŸŽπŸ€–πŸŒ
ColorValuesystem defaultβœ…βœ…βœ…

When not provided, iOS 26+ uses the default Liquid Glass effect, while iOS 18 and below uses the system background color. Android uses Material Design 3's colorSurfaceContainerLow which automatically adapts to light/dark mode.

On iOS 26+, this paints over the Liquid Glass background. Use a translucent color to tint the glass, or set glass to false for a flat color.

glass

Keeps the Liquid Glass background behind backgroundColor. Set to false to remove the glass and render a flat background. backgroundBlur always removes the glass.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ… 26.1+
<TrueSheet backgroundColor="#ffffff" glass={false}>
  <View />
</TrueSheet>

backgroundBlur

The blur effect style on iOS. When set, applies a blur effect over the backgroundColor. Example: "light", "dark", etc.

TypeDefaultπŸŽπŸ€–πŸŒ
BackgroundBlurβœ…

On iOS 26.1+, setting this prop will override the default Liquid Glass effect.

blurOptions

Options for customizing the blur effect. Only applies when backgroundBlur is set.

TypeDefaultπŸŽπŸ€–πŸŒ
BlurOptionsβœ…
<TrueSheet
  backgroundBlur="dark"
  blurOptions={{
    intensity: 80,
    interaction: false,
  }}
>
  <View />
</TrueSheet>

cornerRadius

The sheet corner radius.

TypeDefaultπŸŽπŸ€–πŸŒ
numbersystem defaultβœ…βœ…βœ…

When not provided, iOS uses the device's native corner radius automatically, while Android defaults to 16 (following Material Design 3 guidelines).

elevation

The elevation (shadow depth) of the sheet.

TypeDefaultπŸŽπŸ€–πŸŒ
number4βœ…βœ…

maxContentHeight

The absolute maximum height of the sheet content, regardless of detents.

TypeDefaultπŸŽπŸ€–πŸŒ
numberβœ…βœ…βœ…

maxContentWidth

The maximum width of the sheet content.

TypeDefaultπŸŽπŸ€–πŸŒ
numberβœ…βœ…βœ…

On Android and Web, the sheet defaults to a maximum width of 640dp. Setting this prop overrides that default. On iOS, the sheet uses the system default width.

This prop is ignored on phones in portrait orientation β€” the sheet always spans the full width.

placement

Horizontal placement of the sheet. 'leading' and 'trailing' follow the layout direction (left/right in LTR, right/left in RTL).

TypeDefaultπŸŽπŸ€–πŸŒ
'automatic' | 'leading' | 'center' | 'trailing''automatic'βœ…βœ…βœ…

'automatic' lets the system decide. It only differs from 'center' on iOS 27+, where both map to UISheetPresentationController's native preferredPlacement. On Android, Web, and iOS 26 and below, 'automatic' and 'center' both center the sheet.

On iOS 26 and below, edge placement uses sourceView. System-defined margins prevent fully flush edge attachment.

This prop is ignored on phones in portrait orientation.

placementOffset

The offset from the screen edge. Only applies when placement is 'leading' or 'trailing'.

TypeDefaultπŸŽπŸ€–πŸŒ
number16βœ…βœ…

dismissible

If set to false, the sheet will prevent interactive dismissal via dragging or clicking outside of it.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…βœ…

Blocked attempts fire onDismissAttempt. Use it to confirm before dismissing programmatically, e.g. when a form has unsaved changes.

draggable

If set to false, the sheet will disable dragging to resize. The sheet can only be resized programmatically using the resize method.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…βœ…

When draggable is false, the grabber is automatically hidden.

dimmed

Specify whether the sheet background is dimmed. Set to false to allow interaction with the background components.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…βœ…

dimmedDetentIndex

The detent index that the sheet should start to dim the background.

TypeDefaultπŸŽπŸ€–πŸŒ
number0βœ…βœ…βœ…

This is ignored if dimmed is set to false.

initialDetentIndex

Initially present the sheet, after mounting, at a given detent index.

TypeDefaultπŸŽπŸ€–πŸŒ
number-1βœ…βœ…βœ…

initialDetentAnimated

Specify whether the sheet should animate after mounting. Used with initialDetentIndex.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…βœ…

lazy

Specify whether the sheet content should mount lazily, on first presentation. Set to false to mount the content before presentation without presenting the sheet. Use this when content is not ready on the first render, then call present() after your readiness signal so auto detents measure the settled content.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…

Content that requires window attachment to measure, such as SwiftUI-hosted views, still only measures during presentation.

grabber

Shows a native grabber (or drag handle) on the sheet.

TypeDefaultπŸŽπŸ€–πŸŒ
booleantrueβœ…βœ…βœ…

iOS uses the native UISheetPresentationController grabber by default, while Android renders a native view following Material Design 3 specifications (32x4dp, centered, with the standard drag handle color).

When grabberOptions is provided, iOS uses a custom grabber view instead of the system default.

grabberOptions

Options for customizing the grabber appearance. Only applies when grabber is true.

TypeDefaultπŸŽπŸ€–πŸŒ
GrabberOptionsβœ…βœ…
<TrueSheet
  grabber
  grabberOptions={{
    width: 48,
    height: 6,
    topMargin: 10,
    color: '#FF0000',
  }}
>
  <View />
</TrueSheet>

On iOS, when grabberOptions is not provided, the native system grabber is used. When any option is provided, a custom grabber view with vibrancy effect is rendered instead.

accessibilityOptions

Options for customizing (e.g. localizing) the accessibility strings announced by screen readers.

TypeDefaultπŸŽπŸ€–πŸŒ
AccessibilityOptionsβœ…βœ…βœ…
<TrueSheet
  accessibilityOptions={{
    grabberLabel: 'PoignΓ©e de dΓ©placement',
    expandedValue: 'DΓ©veloppΓ©',
    collapsedValue: 'RΓ©duit',
  }}
>
  <View />
</TrueSheet>

On iOS, the grabber strings only apply when grabberOptions is provided. Without it, iOS uses the system grabber which is already localized by the system.

A component that is fixed at the top of the sheet content. Useful for search bars, titles, or other header content. The header height is automatically accounted for in layout calculations. Accepts a functional Component or ReactElement. See this guide for example.

TypeDefaultπŸŽπŸ€–πŸŒ
ComponentType<...> | ReactElementβœ…βœ…βœ…

headerStyle

Style for the header container.

TypeDefaultπŸŽπŸ€–πŸŒ
StyleProp<ViewStyle>βœ…βœ…βœ…

headerOptions

Options for customizing header behavior.

TypeDefaultπŸŽπŸ€–πŸŒ
HeaderOptionsβœ…βœ…βœ…

A component that is pinned at the bottom of the sheet. The footer height is automatically accounted for in layout calculations. Accepts a functional Component or ReactElement. See this guide for example.

TypeDefaultπŸŽπŸ€–πŸŒ
ComponentType<...> | ReactElementβœ…βœ…βœ…

footerStyle

Style for the footer container.

TypeDefaultπŸŽπŸ€–πŸŒ
StyleProp<ViewStyle>βœ…βœ…βœ…

footerOptions

Options for customizing footer behavior.

TypeDefaultπŸŽπŸ€–πŸŒ
FooterOptionsβœ…βœ…βœ…

scrollableRef

A ref to the scrollable component (e.g. ScrollView, FlatList) rendered within the sheet content. Required for scrollable handling β€” nested scrolling, keyboard insets, and auto detent sizing are wired to this scrollable. See this guide for more information.

TypeDefaultπŸŽπŸ€–πŸŒ
RefObject<Component>βœ…βœ…βœ…

scrollableOptions

Options for customizing scrollable behavior. Applies to the scrollable provided via scrollableRef. See this guide for more information.

TypeDefaultπŸŽπŸ€–πŸŒ
ScrollableOptionsβœ…βœ…βœ…

presentation

Controls the sheet presentation style on iPad and web (landscape/tablet).

  • 'page': bottom-attached page sheet (full or readable width).
  • 'form': centered floating form sheet (default form-sheet width).

'form' is absolute β€” maxContentWidth is ignored when set.

TypeDefaultπŸŽπŸ€–πŸŒ
'page' | 'form''page'17+βœ…

insetAdjustment

Controls how the bottom safe area inset affects detent heights.

TypeDefaultπŸŽπŸ€–πŸŒ
InsetAdjustment"automatic"βœ…βœ…

detached

Renders the sheet as a detached floating card, not attached to the bottom edge.

TypeDefaultπŸŽπŸ€–πŸŒ
booleanfalseβœ…

detachedOffset

The offset from the bottom edge when detached is enabled.

TypeDefaultπŸŽπŸ€–πŸŒ
number16βœ…

style

The sheet's content style override.

Content lays out naturally by default β€” like a regular view or a screen. Pass flex: 1 to fill the sheet's visible height per detent.

TypeDefaultπŸŽπŸ€–πŸŒ
StyleProp<ViewStyle>βœ…βœ…βœ…
Edit on GitHub

On this page