Pull Search
The iOS 26 search, pull the list down and a liquid glass pill grows from the bottom.
Prerequisites
This animation is built on the following libraries. expo install pins the versions that match your SDK, and the CLI tells you exactly which ones are missing when you add the component.
npx expo install react-native-reanimated expo-blur expo-glass-effect expo-haptics expo-symbols react-native-safe-area-contextInstall
npx @rslab/cli add pull-searchUsage
const [query, setQuery] = useState('');
<PullSearch placeholder="Search apps" query={query} onQueryChange={setQuery}>
<YourFilteredList query={query} />
</PullSearch>;How it works
- Overscroll as progress. The scroll view's negative
contentOffset.ymaps to a 0..1 pull value. The pill's opacity, scale and translateY derive from it, so the gesture drives the reveal directly, no spring involved. - Two-stage reveal. During the pull the pill is a compact centered loupe bubble. Crossing the threshold expands it to the full-width field, and the loupe cross-fades into the input row. One light haptic fires exactly at the threshold.
- Keyboard docking.
useAnimatedKeyboardstreams the keyboard height every frame and the pill rides it pixel-perfect, including the interactive drag dismiss. - Real Liquid Glass.
expo-glass-effecton iOS 26, blur fallback everywhere else. Two device-only traps: animating opacity on the pill kills UIGlassEffect on a real iPhone (fine in the simulator), so the pill hides by sliding below the screen edge. Andoverflow: hiddenon the container rasterizes the glass, the radius lives on theGlassViewitself. - Typing stays native. The
TextInputis uncontrolled, the query is lifted throughonChangeTextonly, so fast typing never drops a character.
Tuning
PULL_THRESHOLD(90): pull distance to arm the searchOPEN_EASING: calm bezier (0.32, 0.72, 0, 1), no overshoot on purpose- Pill metrics in
styles.pill(height 52, radius 26, margins 16)