React-Native Dimensions 获取高度不准确解决

在实际开发中,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,

你可能感兴趣的:(React-Native Dimensions 获取高度不准确解决)