uni-app 相同字体大小设置,但是编译出来在苹果和安卓的大小不一样

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app 相同字体大小设置,但是编译出来在苹果和安卓的大小不一样

操作步骤:

打开以下链接 http://www.smartcitybd.com:8087/#/ 打开开发者模式,切换苹果和安卓设备,选择相似尺寸,可以明显发现不同端的设备,字体大小不一样

预期结果:

安卓、苹果两端的字体大小需要保持一样

实际结果:

切换苹果和安卓设备,选择相似尺寸明显发现不同端的设备,字体大小不一样

bug描述:

相同字体大小设置,但是编译出来,苹果和安卓的大小不一样

附件:

image

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 window10
HBuilderX 正式
HBuilderX版本 4.24
手机系统 全部
手机系统版本 iOS 14
手机厂商 苹果
页面类型 vue
Vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX
App下载地址 http://www.smartcitybd.com:8087/#/

4 回复

用的啥单位


看着都差不多啊。。是不是你的dpr的问题,一个2.6,一个3

本来也不一样,设备尺寸一样,但是分辨率不同,要想测试这个,得找屏幕尺寸相同,分辨率也得相同的两端机型才可以

在uni-app中,由于iOS和Android平台对字体渲染存在差异,即使设置了相同的字体大小,最终显示的效果也可能会有所不同。为了解决这一问题,可以通过一些技术手段来尽量统一两个平台上的字体显示。以下是一些常见的解决方案,并结合代码案例进行说明。

1. 使用px与rpx结合

uni-app推荐使用rpx(responsive pixel)作为单位,以适应不同屏幕尺寸。但在字体方面,有时直接使用px可以更精确地控制大小。你可以根据不同平台设置不同的字体大小。

// 在App.vue中根据平台设置全局变量
const platform = uni.getSystemInfoSync().platform;
Vue.prototype.$isIOS = platform === 'ios';

// 在组件中使用
<template>
  <view>
    <text :style="{ fontSize: isIOS ? '16px' : '18rpx' }">示例文本</text>
  </view>
</template>

<script>
export default {
  computed: {
    isIOS() {
      return this.$isIOS;
    }
  }
}
</script>

2. 使用自定义样式类

可以针对不同的平台定义不同的样式类,然后在组件中动态绑定。

/* 在App.vue或公共样式文件中定义 */
.text-ios {
  font-size: 16px;
}
.text-android {
  font-size: 18rpx;
}
<!-- 在组件中使用 -->
<template>
  <view>
    <text :class="[isIOS ? 'text-ios' : 'text-android']">示例文本</text>
  </view>
</template>

<script>
export default {
  computed: {
    isIOS() {
      return uni.getSystemInfoSync().platform === 'ios';
    }
  }
}
</script>

3. 使用字体缩放比例调整

如果希望所有字体大小都按照一定比例进行缩放,可以在全局样式中设置。

/* 在App.vue或公共样式文件中定义全局缩放比例 */
:root {
  --font-scale-ios: 1;
  --font-scale-android: 1.125; /* 根据实际情况调整 */
}

@media (platform: ios) {
  :root {
    --font-scale: var(--font-scale-ios);
  }
}

@media (platform: android) {
  :root {
    --font-scale: var(--font-scale-android);
  }
}

/* 在组件中使用 */
<template>
  <view>
    <text :style="{ fontSize: `${16 * getComputedStyle(document.documentElement).getPropertyValue('--font-scale')}px` }">示例文本</text>
  </view>
</template>

注意:由于CSS媒体查询中的platform并非所有浏览器都支持,实际开发中可能需要结合JavaScript动态判断平台来实现类似效果。

通过上述方法,可以在一定程度上减少iOS和Android平台上字体大小显示不一致的问题。根据具体需求选择合适的方法进行调整。

回到顶部