Skip to main content

Scale Animation

Enable iOS-style background scaling when bottom sheets are opened.

Setup

Wrap your app content in BottomSheetScaleView:

<BottomSheetManagerProvider id="default">
<BottomSheetScaleView>
<YourAppContent />
</BottomSheetScaleView>
<BottomSheetHost />
</BottomSheetManagerProvider>
Important

BottomSheetHost must be outside of BottomSheetScaleView. If you wrap BottomSheetHost inside BottomSheetScaleView, the bottom sheets themselves will also scale, which is not the desired behavior.

Enable Scale Effect

Open sheets with scaleBackground: true:

openBottomSheet(<MySheet />, { scaleBackground: true });

Or with the portal API:

const { open } = useBottomSheetControl('my-sheet');
open({ scaleBackground: true });

Custom Configuration

Configure the scale animation via BottomSheetManagerProvider:

<BottomSheetManagerProvider
id="default"
scaleConfig={{
scale: 0.92, // Scale factor (default: 0.92)
translateY: 0, // Y translation
borderRadius: 24, // Border radius when scaled
animation: { // Animation type and config
type: 'timing',
config: { duration: 300 },
},
}}
>
{/* ... */}
</BottomSheetManagerProvider>

Using Spring Animation

For a more natural feel, use spring animation:

<BottomSheetManagerProvider
id="default"
scaleConfig={{
scale: 0.92,
borderRadius: 24,
animation: {
type: 'spring',
config: { damping: 15, stiffness: 150 },
},
}}
>
{/* ... */}
</BottomSheetManagerProvider>

ScaleConfig Options

PropertyTypeDefaultDescription
scalenumber0.92Scale factor applied to background
translateYnumber10Vertical translation in pixels
borderRadiusnumber12Border radius when scaled
animationScaleAnimationConfig{ type: 'timing', config: { duration: 300 } }Animation configuration

ScaleAnimationConfig

The animation property accepts either timing or spring configuration:

// Timing animation
{ type: 'timing', config?: WithTimingConfig }

// Spring animation
{ type: 'spring', config?: WithSpringConfig }

WithTimingConfig and WithSpringConfig are types from react-native-reanimated.