safeAreaView + React Navigation 如何处理?
How to deal with safeAreaView + React Navigation?
第一个屏幕截图未应用 SafeAreaView
,第二个屏幕截图应用 SafeAreaView
如图所示,Stack header
与之前相比显得笨重。无论如何我们可以将 SafeAreaView
应用于底部?
不要使用 React-Native
中的 SafeAreaView
,而是使用 react-navigation
中的 SafeAreaView
,如下所示:
import { SafeAreaView } from 'react-navigation';
然后你可以使用 prop forceInset
来自定义填充,在你的情况下,
<SafeAreaView style={styles.safeArea} forceInset={{ top: 'never' }}>
对于 React Navigation v5,没有 SafeAreaView
导出。推荐的方法是使用 react-native-safe-area-context.
阅读更多:React Navigation v5.x - Supporting safe areas.
示例
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
function Demo() {
return (
<SafeAreaView
style={{ flex: 1, justifyContent: 'space-between', alignItems: 'center' }}
>
<Text>This is top text.</Text>
<Text>This is bottom text.</Text>
</SafeAreaView>
);
}
export default function App() {
return (
<SafeAreaProvider>
<NavigationContainer>{/*(...) */}</NavigationContainer>
</SafeAreaProvider>
);
}
react-native 也有“SafeAreaView”,但这只适用于 ios。
import {Text,View,SafeAreaView,Platform,StatusBar} from "react-native";
所以设置 SetAreaView 为 android,你使用的 StatusBar 只在 android 中有效,它的 currentHeight 是 24。
<SafeAreaView style={{ flex: 1, marginTop: StatusBar.currentHeight }}>
<View style={{ padding: 16, backgroundColor: "green" }}>
<Text>Page content</Text>
</View>
</SafeAreaView>
第一个屏幕截图未应用 SafeAreaView
,第二个屏幕截图应用 SafeAreaView
如图所示,Stack header
与之前相比显得笨重。无论如何我们可以将 SafeAreaView
应用于底部?
不要使用 React-Native
中的 SafeAreaView
,而是使用 react-navigation
中的 SafeAreaView
,如下所示:
import { SafeAreaView } from 'react-navigation';
然后你可以使用 prop forceInset
来自定义填充,在你的情况下,
<SafeAreaView style={styles.safeArea} forceInset={{ top: 'never' }}>
对于 React Navigation v5,没有 SafeAreaView
导出。推荐的方法是使用 react-native-safe-area-context.
阅读更多:React Navigation v5.x - Supporting safe areas.
示例
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
function Demo() {
return (
<SafeAreaView
style={{ flex: 1, justifyContent: 'space-between', alignItems: 'center' }}
>
<Text>This is top text.</Text>
<Text>This is bottom text.</Text>
</SafeAreaView>
);
}
export default function App() {
return (
<SafeAreaProvider>
<NavigationContainer>{/*(...) */}</NavigationContainer>
</SafeAreaProvider>
);
}
react-native 也有“SafeAreaView”,但这只适用于 ios。
import {Text,View,SafeAreaView,Platform,StatusBar} from "react-native";
所以设置 SetAreaView 为 android,你使用的 StatusBar 只在 android 中有效,它的 currentHeight 是 24。
<SafeAreaView style={{ flex: 1, marginTop: StatusBar.currentHeight }}>
<View style={{ padding: 16, backgroundColor: "green" }}>
<Text>Page content</Text>
</View>
</SafeAreaView>