😃
[ReactNative] SafeAreaViewで混乱しないために
SafeAreaView
が複数のライブラリから提供されていて混乱する。どれを使えばいいのよと。
筆者の知る限り、最低3つのライブラリで観測してる。
react-native
react-native-safe-area-context
react-native-safe-area-view
「どれでも良いのでは?」と思うかもしれないが、実はどれでも良くない。
適切に選ばないと予想通りの動作をしない。
対策をこの記事に残しておく。
まとめ
-
SafeAreaView
は必ずSafeAreaProvider
で囲もう -
SafeAreaProvider
はreact-native-safe-area-context
からimportできる。 - 特別な要求が無い限りは
react-native
のSafeAreaView
で十分。ちゃんと機能する。 - 特別な要求(ex:ページ下部だけ適用させたい)がある場合は、
react-native-safe-area-view
のSafeAreaView
を利用する。
詳細
SafeAreaProvider
でラップしておくこと
必ずこいつが無いと、SafeAreaView
がうまいこと機能しないことがある。
どのライブラリのSafeAreaView
を使おうが、必ずSafeAreaProvider
で囲んでおくと安全。
react-native
のSafeAreaView
で十分である。
基本的にはナビゲーション(@react-navigation/bottom-tabs
)などを利用しない限りは、標準のもので十分。
ページ上部、下部ともにSafeAreaを適用してくれる。
react-native-safe-area-view
標準から少し外れるような機能を使いたいなら例えば「ページ上部は適用しなくていい。下部だけ適用してくれ」といった要求がある場合に利用する。
ナビゲーションを利用する場合も、こいつを使っておけば安心。
ちなみに「ページ下部だけ適用させたい」場合の実装は以下
<SafeAreaView style={styles.container} forceInset={{ top: 'never' }}>
<Text style={styles.paragraph}>This is top text.</Text>
<Text style={styles.paragraph}>This is bottom text.</Text>
</SafeAreaView>
Discussion
react-native
のSafeAreaView
はAndroidに対応していないようです。react-native-safe-area-context
のものなら正常に上部ノッチ部分がmarginになりました。触ってみた結果としては、どのみち
SafeAreaProvider
が必要ならreact-native-safe-area-context
のSafeAreaView
を使えばいいと思ったのですが、記事でreact-native
の方をお勧めされている理由は何かあるのでしょうか?(環境)