uni-app <page-meta>中root-font-size在app端设置不生效,h5正常

uni-app <page-meta>中root-font-size在app端设置不生效,h5正常

开发环境 版本号 项目创建方式
Windows Windows 11 HBuilderX
专业版24H2

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:4.29

手机系统:Android

手机系统版本号:Android 14

手机厂商:OPPO

手机机型:一加ACE3pro

页面类型:vue

vue版本:vue3

打包方式:云端

操作步骤:

  1. 根目录创建store文件夹,文件夹中创建index.js,内容为
import { createStore } from 'vuex'  
const store = createStore({  
    state:{//存放状态  
        "scaleFontSize":16  
    },  
    mutations:{  
        setFontScale(state,n){  
            state.scaleFontSize=n  
        }  
    }  
})  

export default store
  1. 创建一个页面设置文字大小
<view class="font">  
    <view class="title">{{$t('index.font')}}</view>  
    <view class="font-list">  
        <view class="font-item" v-for="(item, index) in fontSize" :key="index" @click="onFontSizeChange(item)">  
            <text class="text">{{item.text}}</text>  
            <text class="check" v-if="item.code==fontScale}}">{{$t('font.check')}}</text>  
        </view>  
    </view>  
</view>
  1. js为
export default {  
    data() {  
        return {  
            fontScale: 16  
        }  
    },  
    computed:{  
        fontSize(){  
            return[  
                {  
                    text: this.$t('font.small'),  
                    code:12  
                },  
                {  
                    text: this.$t('font.standard'),  
                    code:16  
                },  
                {  
                    text: this.$t('font.big'),  
                    code:20  
                },  
                {  
                    text: this.$t('font.biggest'),  
                    code:24  
                }  
            ]  
        }  
    },  
    onLoad() {  
        this.fontScale=this.$store.state.scaleFontSize  
        if(!this.fontScale) {  
            this.fontScale = 16;  
        }  
        console.log(this.$store.state.scaleFontSize)  
    },  
    methods: {  
        onFontSizeChange(e){  
            this.fontScale = e.code;  
            this.$store.commit('setFontScale', this.fontScale);  
            uni.setStorage({  
                key:'rootFontSize',  
                data:this.fontScale  
            })  
        }  
    }  
}
  1. 通过该页面动态更新scaleFontSize的大小,在文件所有页面中,均添加
<page-meta :page-font-size="`${$store.state.scaleFontSize}px`" :root-font-size="`${$store.state.scaleFontSize}px`"></page-meta>
  1. 并将页面中文字大小单位设置为rem

预期结果:

更新字体大小后,所有页面文字大小均发生改变


实际结果:

在内置浏览器和chrome中,不光rem单位的文字大小发生改变,所有rpx单位大小也发生了改变。
在app中,只有当前页面发生了改变,若前往其他页面或退出后重新进入,则会发现均未改变

bug描述:

<page-meta>中root-font-size在app端中设置不生效,h5正常 我在页面中pagemeta设置如下

<page-meta :page-font-size="`${$store.state.scaleFontSize}px`" :root-font-size="`${$store.state.scaleFontSize}px`"></page-meta>

手机上显示时,仍以其原本大小显示,不能根据scaleFontSize更新


更多关于uni-app <page-meta>中root-font-size在app端设置不生效,h5正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app <page-meta>中root-font-size在app端设置不生效,h5正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


针对你提到的uni-app中<page-meta>root-font-size属性在App端设置不生效的问题,这通常是由于App端和H5端渲染机制的不同所导致的。在H5端,<page-meta>root-font-size可以直接影响页面的根字体大小,从而通过rem单位影响整个页面的布局。然而,在App端,这个设置可能不会如预期那样生效,因为App端通常有自己的字体缩放逻辑和渲染管道。

为了解决这个问题,我们可以通过编程方式动态设置根字体大小,确保在App端也能正确应用。以下是一个可能的解决方案,通过JavaScript在App端设置根字体大小:

// 在App.vue的onLaunch或onReady生命周期函数中设置
export default {
  onLaunch() {
    this.setRootFontSize();
  },
  methods: {
    setRootFontSize() {
      // 获取屏幕宽度
      const screenWidth = uni.getSystemInfoSync().screenWidth;
      // 设计稿基准宽度,这里假设为375px
      const designWidth = 375;
      // 计算根字体大小,这里假设设计稿上的基准字体大小为16px
      const baseFontSize = 16;
      // 根据屏幕宽度和设计稿宽度计算缩放比例,并应用到根字体大小上
      const rootFontSize = (screenWidth / designWidth) * baseFontSize;
      // 设置页面的根字体大小
      document.documentElement.style.fontSize = `${rootFontSize}px`;
    }
  }
};

在这段代码中,我们通过uni.getSystemInfoSync().screenWidth获取当前设备的屏幕宽度,然后根据设计稿的基准宽度(这里假设为375px)和基准字体大小(这里假设为16px)计算出根字体大小。最后,通过document.documentElement.style.fontSize将计算出的根字体大小应用到页面上。

请注意,这种方法依赖于直接操作DOM,因此在某些情况下(如使用Weex渲染引擎的uni-app版本)可能需要调整。此外,如果你的应用需要在多个平台上运行,确保在设计稿和基准字体大小时考虑到不同平台的差异。

通过这种方式,我们可以在App端动态设置根字体大小,从而解决<page-meta>root-font-size设置不生效的问题。希望这个解决方案对你有所帮助!

回到顶部