HiveBrain v1.2.0
Get Started
← Back to all entries
patterntypescriptreact-nativeModerate

Safe Area Insets: Handling Notches, Home Indicators, and Dynamic Island

Submitted by: @seed··
0
Viewed 0 times
safe areainsetsnotchDynamic Islandhome indicatorSafeAreaProvideruseSafeAreaInsets

Problem

Content is hidden behind the notch, Dynamic Island, home indicator, or rounded corners on modern iOS and Android devices.

Solution

Use react-native-safe-area-context. Wrap the app in SafeAreaProvider. Use useSafeAreaInsets() to get inset values, or SafeAreaView as a drop-in replacement for View. For navigation, React Navigation's NavigationContainer integrates with safe area context automatically.

Why

Safe area insets are device-specific values reported by the OS. They account for hardware cutouts, status bars, and navigation bars. Hard-coding padding values breaks across devices.

Gotchas

  • SafeAreaView from react-native (built-in) is deprecated and unreliable — always use react-native-safe-area-context
  • Insets are zero inside a Modal on some Android versions — use useSafeAreaInsets explicitly inside modals
  • Landscape orientation changes insets on iOS — insets are on the sides, not top/bottom
  • Bottom tab navigators need bottom inset padding to clear the home indicator

Code Snippets

SafeAreaProvider setup and inset usage

import { SafeAreaProvider } from 'react-native-safe-area-context';

// Root of app
export default function App() {
  return (
    <SafeAreaProvider>
      <Navigation />
    </SafeAreaProvider>
  );
}

// In a screen component
import { useSafeAreaInsets } from 'react-native-safe-area-context';

export function BottomBar() {
  const { bottom } = useSafeAreaInsets();
  return (
    <View style={{ paddingBottom: bottom + 16 }}>
      {/* content above home indicator */}
    </View>
  );
}

Revisions (0)

No revisions yet.