What Snap Points Do
TSX
snapPoints turns a screen into a detented sheet or drawer. Each numeric value is a fraction of the screen size on the active gesture axis.
gestureEnabled controls whether the sheet can dismiss past its minimum detent. It does not disable snapping between non-dismiss detents.
Allowed Values
Pass snap points in ascending order. The supported values are:
- fractions such as
0.4,0.7, or1 "auto"for intrinsic content sizing
Initial Detent
initialSnapIndex selects which detent the screen opens at:
TSX
This screen opens at the second detent, 0.5.
Auto Snap Points
"auto" measures the content and resolves that detent from the intrinsic content size:
TSX
Reading Target Snap State
The selected target detent lives on current.snapIndex:
TSX
current.snapIndex updates when the target changes, such as initial mount, snapTo(), or gesture release. Use current.animatedSnapIndex when the visual state should follow the user's finger between detents.
Release Targeting
When the user releases the gesture, the library projects the current progress with the release velocity, then snaps to the target zone that projected value lands in.
These options shape that behavior:
TSX
gestureSnapVelocityImpactchanges how much the release velocity nudges the chosen detentgestureReleaseVelocityScalechanges the post-release spring energy
gestureReleaseVelocityScale affects how the sheet settles after the target is chosen. It does not replace gestureSnapVelocityImpact.
Snap Locking
gestureSnapLocked locks gesture-driven movement to the current detent:
TSX
With locking enabled, users cannot drag between detents. If dismissal is still enabled, swipe-to-dismiss remains available.
Because this is a screen option, you can toggle it at runtime with navigation.setOptions({ gestureSnapLocked: true }).
Scroll Handoff
If a snap sheet contains scrollable content, use the transition-aware scrollables and choose a handoff mode with sheetScrollGestureBehavior:
TSX
Modes:
"expand-and-collapse": boundary drags from scroll content can expand and collapse the sheet"collapse-only": boundary drags from scroll content can collapse, but expansion must start from dead space outside the scrollable area
The older expandViaScrollView boolean still maps to these modes, but it is deprecated.
Axis And Pinch Rules
Snap sheets can be driven by one or more pan axes and by pinch:
- use
verticalorvertical-invertedfor bottom or top sheets - use
horizontalorhorizontal-invertedfor drawers - use
pinch-inorpinch-outfor two-finger detent changes
When you pass an array, the first direction on each pan axis controls that axis's collapse polarity. For pinch, the first pinch direction controls collapse and the opposite pinch direction expands.
Configured pan and pinch gestures can track at the same time. The current active gesture owns release targeting, so pan can hand off to pinch or pinch can hand off to pan during the same interaction.
TSX
In this example, pinch-out, dragging right, or dragging up collapses the sheet. Pinch-in, dragging left, or dragging down expands it.
Pan and pinch can track during the same interaction. The gesture that is active at release owns the snap or dismiss decision, while companion gesture values remain available for animation.
Reading Live And Target Detents
Use current.animatedSnapIndex when the UI should follow the live gesture position, including fractional values between detents:
TSX
Use current.snapIndex when you need the current target detent after mount, snapTo(), or gesture release.