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
打包方式:云端
操作步骤:
- 根目录创建store文件夹,文件夹中创建index.js,内容为
import { createStore } from 'vuex'
const store = createStore({
state:{//存放状态
"scaleFontSize":16
},
mutations:{
setFontScale(state,n){
state.scaleFontSize=n
}
}
})
export default store
- 创建一个页面设置文字大小
<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>
- 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
})
}
}
}
- 通过该页面动态更新scaleFontSize的大小,在文件所有页面中,均添加
<page-meta :page-font-size="`${$store.state.scaleFontSize}px`" :root-font-size="`${$store.state.scaleFontSize}px`"></page-meta>
- 并将页面中文字大小单位设置为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
更多关于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
设置不生效的问题。希望这个解决方案对你有所帮助!