🎉 New features
- iOS: Smoother
onPositionChange, andonWillDismissnow fires only when a drag-to-dismiss is committed. (#744, #756 by @lodev09) - The
autodetent now works with plugged scrollables — the sheet sizes to the scrollable's content height. (#743 by @lodev09) - New
headerOptionsprop with apositionoption — set to'absolute'to float the header over the content and exclude it from theautodetent height. (#747 by @lodev09) - The footer now absorbs the bottom safe-area inset as padding when
insetAdjustmentisautomatic, except while the keyboard is open. (#749, #750 by @lodev09) - New
scrollableOptions.keyboardOffsetoption to adjust the scrollable's keyboard bottom inset. (#785 by @lodev09)
🐛 Bug fixes
- Android: A stacked parent sheet now follows its child frame-by-frame when the child resizes, and no longer gets stuck at stale detents after a half-expanded settle. (#797 by @lodev09)
- Android: The scrollable content now tracks the keyboard frame-by-frame — the focused input rides the keyboard up smoothly, and the scroll position eases back on dismiss instead of snapping. (#798 by @lodev09)
- The keyboard-driven scroll inset now accounts for a floating footer's height. (#752 by @lodev09)
- Auto detents now correctly size explicit-height and deeply nested scrollables. (#783 by @lodev09)
💥 Breaking changes
- The footer now lays out relative by default, taking up space below the content — set
footerOptions.positionto'absolute'to restore the previous floating behavior. (#748, #754 by @lodev09) - Content now wraps its children's height by default instead of filling the sheet — pass
flex: 1viastyleto fill. (#746 by @lodev09) - The container is now sized to the sheet's visible height per detent and tracks it in realtime while dragging, requiring React Native 0.82+. (#735 by @lodev09)
- The scrollable's bottom safe-area inset now mirrors iOS's
contentInsetAdjustmentBehavior="automatic"on all platforms — opt out with the newscrollableOptions.contentInsetAdjustmentBehavior. (#784, #796 by @lodev09) - The
scrollableprop is replaced byscrollableRef— pass a ref of yourScrollView/FlatListto wire nested scrolling, keyboard insets, andautodetent sizing. (#795 by @lodev09) - The sheet navigator is now built on the new
standard-navigationpeer dependency, with first-class Expo Router support via theSheetlayout from the new/navigation/expo-routerentry point. (#772 by @lodev09)
💡 Others
Full Changelog: v3.11.12...v4.0.0-beta.4