How to create Apple Maps style liquid glass sheets in Expo (the real way)
Key Points
- iOS 26 detents: floating → medium → full sheet
- TrueSheet: native liquid glass + fine-grained control
- Expo Router: quick setup but limited customization
Summary
This note shows three practical ways to recreate iOS 26’s Apple Maps “liquid glass” bottom sheet in Expo: expo-swift-ui BottomSheet, Expo Router’s formSheet presentation, and the native TrueSheet. iOS 26 detents behave like this: lowest detent = floating card with gap and full rounding, middle detent = closer but still floating, top detent = full sheet with no gap. The goal is to get the liquid glass appearance plus smooth detent transitions while choosing the right tradeoff between convenience and control.
Key Points
-
expo-swift-ui BottomSheet
- Native and supports the new liquid glass effect out of the box.
- Configure
presentationDetents(e.g.[0.1, 0.5, 1]) for the same detent transitions. - Beta status: good for experimentation, not recommended for production builds yet.
-
Expo Router
formSheet- Quick to set up via screen options:
presentation: "formSheet",sheetAllowedDetents,sheetInitialDetentIndex. - Must set
contentStyle: { backgroundColor: "transparent" }so the OS liquid glass shows through. - Good for simple flows, but limited if you need custom footers, fine-grained control, or synced animations.
- Quick to set up via screen options:
-
TrueSheet (recommended when you need control)
- Native, supports liquid glass (use
blurTint="default"), detents, footers, and exposes animation values to sync UI with sheet motion. - Control with a ref: present/dismiss via
sheet.current?.present()/dismiss()and setsizeslike[75, "medium", "large"]or percentages. - If using
auto, prefer explicitly setting the lowest height (e.g.75) to avoid sizing issues.
- Native, supports liquid glass (use
-
Practical tips
- Use detents intentionally to mirror the iOS behavior: small (floating) → medium (closer) → full (no gap).
- Disable
gestureEnabledif you want to prevent pull-to-dismiss on lower detents. - Prefer TrueSheet for animation syncing and custom content; use Expo Router for simple quick wins; use expo-swift-ui for experimenting with the native API.
Recommended approach
For production apps that require the Apple Maps interaction fidelity and animation sync, use TrueSheet (native) and control detents + animation values. Use Expo Router for fast implementations where fine control is unnecessary, and try expo-swift-ui only for experiments until it leaves beta.