react-native移动端。StatusBar、SafeAreaView不生效,状态栏,分屏状态。问题适配
问题场景
很奇葩。StatusBar、SafeAreaView都不生效,没有给到正确的屏幕安全空间,项目依赖版本又不能改动,只好通过StatusBar高度设置安全空间,这种方法,遇到分屏、小窗状态下会有空白,通过监听根视图高度和屏幕高度来判断状态来适配
实现方法
通过StatusBar的currentHeight获取状态栏高度
通过Dimensions.get('screen')获取到屏幕的最大高度
在应用根页面,设置一个高度、宽度为100%的View,并通过onLayout监听VIew的变化,与屏幕高度进行比较,判断是否分屏状态
代码实现
复制
import {Dimensions, StatusBar} from "react-native"
// 获取屏幕高度,宽度
const {width, height} = Dimensions.get('screen');
// 状态栏高度
StatusBar.currentHeight
// demo伪代码。注意不同系统版本间差异仍需适配,参考实际解决效果
export function Demo(props: React.PropsWithChildren) {
const [isSplitScreen, setIsSplitScreen] = useState<boolean>(false)
const onRootLayout = useCallback((e: LayoutChangeEvent) => {
const {width, height} = e.nativeEvent.layout;
setIsSplitScreen(height !== globalStyle.screenInfo.height)
}, [])
const rootStyle = useMemo<StyleProp<ViewStyle>>(() => isSplitScreen ? {
width: "100%",
height: "100%"
} : {
width: "100%",
height: "100%",
paddingTop: StatusBar.currentHeight
}, [isSplitScreen])
return <View style={rootStyle} onLayout={onRootLayout}>
{props.children}
</View>
}
作者:https://blog.xn--rpv331d.com/望舒
链接:https://blog.xn--rpv331d.com/望舒/blog/25
转载注意保留文章出处...
1
0
39
No data