React Native에서 iOS Safe Area 대응하기
문제 상황
iPhone X 출시 이후 노치 디바이스 대응이 필요해졌는데, 기존 코드는 paddingTop: 20 같은 하드코딩된 값으로 상태바를 회피하고 있었다. iPhone X에서는 상단 44pt, 하단 34pt의 Safe Area를 고려해야 하는데 이게 제대로 처리되지 않아 UI가 노치에 가려지는 문제가 발생했다.
해결 방법
react-native-safe-area-context 라이브러리를 도입했다.
npm install react-native-safe-area-context
react-native link react-native-safe-area-context
App.js를 SafeAreaProvider로 감싸고:
import { SafeAreaProvider } from 'react-native-safe-area-context';
function App() {
return (
<SafeAreaProvider>
<Navigator />
</SafeAreaProvider>
);
}
각 화면에서는 SafeAreaView를 사용:
import { SafeAreaView } from 'react-native-safe-area-context';
function HomeScreen() {
return (
<SafeAreaView style={{ flex: 1 }}>
<Header />
<Content />
</SafeAreaView>
);
}
주의사항
edgesprop으로 어느 방향의 Safe Area를 적용할지 선택 가능했다- 기존 하드코딩된 패딩 값들을 모두 제거해야 했다
- Android에서는 기본적으로 Safe Area가 적용되지만 StatusBar 높이는 별도 처리 필요
전체 화면을 일일이 수정하는 작업이 번거로웠지만, 이후 다양한 디바이스에서 일관된 UI를 유지할 수 있게 되었다.