【ReactNative】SafeAreaの余白を設定する方法(Android, iOS両方)
SafeAreaとは?
スクリーンで言うとこの部分です。
上の画像は既にSafeAreaの余白を設定したあとのスクリーンショットなのですが、View
だけで構成すると、ステータスバーにコンテンツが重なってしまいます。
対策
- SafeAreaViewを使う (iOS)
- StatusBar.currentHeightをpaddingTopに設定する (Android)
SafeAreaView
SafeAreaViewはiOSのノッチの部分の余白を取ってくれる、react-native
が提供するコンポーネントです。このコンポーネントを使えば、iOSでノッチやステータスバーとコンテンツがかぶることはありませんが、Androidのステータスバーの余白は設定されないため、以下のように別途対応が必要になります。
StatusBar.currentHeight
StatusBar
は、react-native
が提供するコンポーネントで、StatusBar.currentHeight
でステータスバーの高さを取ることができるので、paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0
のようにして、Androidの場合にpaddingTop
で余白を取るようにすれば良いです。
最終的には、以下のようなコードになりました。
import { StatusBar as ExpoStatusBar } from "expo-status-bar";
import React, { useState, useCallback } from "react";
import {
StyleSheet,
Platform,
StatusBar,
Text,
View,
Button,
SafeAreaView,
} from "react-native";
export default function App() {
const [count, setCount] = useState(0);
const increment = useCallback(() => setCount(count + 1), [count]);
return (
<SafeAreaView style={styles.container}>
<ExpoStatusBar style="auto" />
<View>
<Text>Open up App.tsx to start working on your app!</Text>
<Text>Count = {count}</Text>
<Button title="Count Up" onPress={increment} />
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0,
},
});
Author And Source
この問題について(【ReactNative】SafeAreaの余白を設定する方法(Android, iOS両方)), 我々は、より多くの情報をここで見つけました https://qiita.com/jigengineer/items/00bbfa10defc0c2f2fad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .