What Ownership Means
When more than one transition-enabled screen could respond to the same drag, the library resolves ownership before the pan gesture activates.
Ownership Is Per Direction
The gesture system tracks these directions independently:
verticalvertical-invertedhorizontalhorizontal-inverted
That means:
- horizontal and vertical never compete with each other
- vertical and vertical-inverted are different claims
- horizontal and horizontal-inverted are different claims
bidirectionalexpands to all four directions
Resolution Order
For a given drag direction, ownership resolves in this order:
- If the current screen claims that direction, it owns the gesture.
- Otherwise, the library walks up the ancestor chain and finds the nearest ancestor that claims it.
- If no one claims it, the gesture does nothing.
This is why a screen can own one direction locally and still inherit another from an ancestor.
Shadowing
If a child screen and an ancestor both claim the same direction, the child wins for that direction.
Two implementation details matter here:
- only the topmost route in the child navigator registers a shadowing claim
- once that child starts dismissing, the ancestor is allowed to activate again
In practice, shadowing is what prevents two nested navigators from reacting to the same drag at the same time.
Snap Sheets Claim Both Directions on Their Axis
A screen with snapPoints claims both directions on its axis.
TSX
A vertical sheet above owns:
verticalvertical-inverted
A horizontal sheet above owns:
horizontalhorizontal-inverted
This is why the same sheet can expand in one direction and collapse or dismiss in the other.
gestureEnabled: false only disables dismiss at the minimum detent. If snapPoints still exist, the sheet can continue to own its axis for snap navigation.
Scroll Boundary Handoff
Use Transition.ScrollView or Transition.FlatList when scroll content needs to cooperate with navigator gestures.
For non-sheet screens, a scrollable yields only at the boundary for the active direction:
| Direction | Boundary |
|---|---|
vertical | top (scrollY <= 0) |
vertical-inverted | bottom (scrollY >= maxY) |
horizontal | left (scrollX <= 0) |
horizontal-inverted | right (scrollX >= maxX) |
Axis isolation still applies:
- a vertical scroll view does not hand off to horizontal gestures
- a horizontal scroll view does not hand off to vertical gestures
For snap sheets, the handoff is controlled by sheetScrollGestureBehavior:
"expand-and-collapse": boundary drags can expand and collapse the sheet"collapse-only": boundary drags can collapse or dismiss, but expansion must start from dead space outside the scrollable
TSX
If no screen in the current ownership chain claims that direction, the scroll view just keeps the gesture.
Real Nested Navigator Patterns
Different Directions Coexist
This is the cleanest setup: the parent owns one direction, the child screen owns another.
TSX
On Card:
- horizontal is owned locally by
Card - vertical can still resolve to the ancestor
Detailsroute
Same Direction Shadows the Ancestor
If the child screen also claims vertical, it shadows the ancestor's vertical claim while that child is active.
TSX
Now the active child screen owns vertical itself, so the ancestor does not handle the same swipe.
Snap Sheet Shadows Its Axis
If the child screen is a vertical snap sheet, it owns both vertical and vertical-inverted, so a same-axis ancestor no longer receives either direction while the sheet is active.
TSX
If the sheet instead uses gestureDirection: "horizontal", it owns the horizontal axis and can still inherit vertical ownership from an ancestor.
useScreenGesture()
useScreenGesture() returns a gesture ref so you can coordinate your own Gesture Handler gestures with the navigator gesture.
Valid targets are:
useScreenGesture()useScreenGesture({ depth: 0 })useScreenGesture({ depth: -1 })useScreenGesture({ depth: -2 })
TSX
depth: 0 resolves the current screen gesture. Negative depths walk ancestors. Ancestor targeting stops at isolation boundaries, so a negative depth may resolve to null once the lookup reaches an isolated tree edge.