react-native-ui-lib主题字体单位是dp还是px?及px转dp方法确认
关于react-native-ui-lib自定义排版中fontSize单位及px转dp的问题解答
1. fontSize的单位是dp还是px?
React Native里fontSize的默认单位是dp(密度无关像素),react-native-ui-lib完全遵循RN的这一规范,所以你代码里的32和24都是dp值。
2. 设计稿px转dp的正确方法
设计稿给出的px值,需要结合设计稿的基准分辨率来转换(多数设计稿以iPhone 6的750px宽为基准,对应RN中的375dp),正确的转换逻辑如下:
import { PixelRatio } from 'react-native'; // 针对750px宽的设计稿 const DESIGN_BASE_WIDTH = 750; const pxToDp = (px) => px / (DESIGN_BASE_WIDTH / 375); // 通用版:已知设计稿对应的像素密度时(比如2x设计稿直接除以2) const pxToDpUniversal = (px) => px / PixelRatio.get();
3. 你给出的转换公式是否正确?
你提供的const dp = px => px / PixelRatio.getFontScale()不正确。原因是:
PixelRatio.getFontScale()是获取系统的字体缩放比例(比如用户在系统设置里调大了字体),它的作用是适配系统字体大小偏好,而非处理屏幕密度的适配。- 用这个公式会导致字体大小随系统字体设置出现异常波动,不符合常规的屏幕适配逻辑。
如果需要同时适配屏幕密度和系统字体缩放,可以用下面的写法:
import { PixelRatio } from 'react-native'; const DESIGN_BASE_WIDTH = 750; const pxToDpWithFontScale = (px) => { // 先转成基础dp值 const baseDp = px / (DESIGN_BASE_WIDTH / 375); // 再乘以系统字体缩放比例 return baseDp * PixelRatio.getFontScale(); };
内容的提问来源于stack exchange,提问作者EBDS
相关产品推荐
相关产品推荐

