You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:32:43