在实际开发中,React-Native通过调用Dimensions.get('window')去获取全面屏手机(MI 10)的高度时,发现获取到的高度要比实际手机高度来的短一些,针对此种情况对全面屏手机做适配。
首先通过获取屏幕的纵横比来判断当前手机是否为全面屏,常规纵横比为大于1.8 (16:9)。(这里只做了简单判断,当然也有很多更为准确的方案)
查阅相关资料后发现是因为全面屏的statusBar高度问题。
导包:
import { Dimensions,NativeModules } from 'react-native';
const { StatusBarManager } = NativeModules;
定义高和宽并计算纵宽比:
const {width,height} = Dimensions.get('window')
const wh = height/width
对纵宽比做判断并拿到真实高度(针对安卓):
const trueheight = wh > 1.8 ? height+ StatusBarManager.HEIGHT * 2 : height,
存疑:
1.计算纵宽比,当手机为全面屏时,是否会因为获取到的长度会比实际的少,导致wh(纵宽比)降低,影响后面的判断。
补充:MI 10 取Dimensions.get('window').height 拿到的高度为710左右,屏幕宽度在392,纵宽比计算得1.81。
2.在链接1中认为差一个StatusBar的高度,实际编写中,发现链接2的两个高度较为合理。
补充:全面屏发现小米10 占两个高度 , 另一款全面屏测试机占一个高度
实际测试中发现ios设备如果为全面屏则不需要进行处理 所以这里我们需要加一层判断。
import { Dimensions, PixelRatio, NativeModules, Platform } from 'react-native';
const { StatusBarManager } = NativeModules;
height: Platform.OS === 'ios' ? Dimensions.get('window').height : Dimensions.get('window').height / Dimensions.get('window').width > 1.8 ? Dimensions.get('window').height + StatusBarManager.HEIGHT * 2 : Dimensions.get('window').height,
参考链接:
1.https://blog.csdn.net/u014012083/article/details/102938789