uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效

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

uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效

开发环境 版本号 项目创建方式
Windows Windows 10 19044.1645 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:全部

手机厂商:vivo

页面类型:nvue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

App下载地址或H5网址:[https://github.com/wq0425/ttfDemo](https://github.com/wq0425/ttfDemo)

测试过的手机:vivo nexs

操作步骤:
https://github.com/wq0425/ttfDemo
预期结果:
vue路由跳转nvue后引入外部字体生效
实际结果:
vue路由跳转nvue后引入外部字体不生效
bug描述:
在项目中需要修改app字体,是个视频项目,vue页面路由跳转nvue页面,vue页面字体修改生效,但是跳转nvue页面后不生效,
[bug复现地址](https://github.com/wq0425/ttfDemo)

3 回复

这个对的NVUE不支持公共页面引入的字体 插件引入方式 PluginName = uni.requireNativePlugin(PluginName)

uni-app 中,从 Vue 页面跳转到 nvue 页面时,引入外部字体不生效的问题可能是由于 nvue 页面的渲染机制与 Vue 页面不同所导致的。nvue 页面使用的是原生渲染,而 Vue 页面使用的是 WebView 渲染,因此它们的样式和资源加载方式有所不同。

以下是一些可能的解决方案:

1. 在 nvue 页面中引入字体

确保在 nvue 页面中正确引入了字体文件。你可以在 nvue 页面的 <style> 标签中通过 @font-face 引入字体。

<style>
@font-face {
  font-family: 'CustomFont';
  src: url('/static/fonts/CustomFont.ttf');
}

.text {
  font-family: 'CustomFont';
}
</style>

2. 使用 uni.loadFontFace 动态加载字体

uni-app 提供了 uni.loadFontFace API,可以在页面加载时动态加载字体。你可以在 nvue 页面的 onLoad 生命周期中调用这个 API。

export default {
  onLoad() {
    uni.loadFontFace({
      family: 'CustomFont',
      source: 'url("/static/fonts/CustomFont.ttf")',
      success: () => {
        console.log('字体加载成功');
      },
      fail: (err) => {
        console.log('字体加载失败', err);
      }
    });
  }
}

3. 确保字体文件路径正确

确保字体文件的路径是正确的,并且字体文件已经正确放置在项目的 static 目录下。路径应该是相对于 static 目录的。

4. 检查字体文件格式

确保字体文件的格式是 nvue 页面支持的格式。通常,ttfotf 格式的字体文件在 nvue 页面中是可以正常使用的。

5. 使用 weex 的原生样式

nvue 页面使用的是 weex 的原生样式,因此某些 CSS 属性可能不支持。确保你使用的 CSS 属性在 nvue 页面中是有效的。

6. 检查字体是否被正确应用

nvue 页面中,确保你正确地将字体应用到了元素上。例如:

<template>
  <view class="text">Hello, World!</view>
</template>

<style>
.text {
  font-family: 'CustomFont';
}
</style>

7. 使用 uni-app 的全局样式

如果你希望在多个页面中使用相同的字体,可以将字体定义在 App.vue 的全局样式中,这样所有页面都可以使用这个字体。

/* App.vue */
<style>
@font-face {
  font-family: 'CustomFont';
  src: url('/static/fonts/CustomFont.ttf');
}
</style>

然后在 nvue 页面中直接使用这个字体:

<template>
  <view class="text">Hello, World!</view>
</template>

<style>
.text {
  font-family: 'CustomFont';
}
</style>

8. 检查 nvue 页面的渲染模式

nvue 页面有两种渲染模式:weexuni-app。确保你使用的是 uni-app 的渲染模式,因为 weex 模式可能不支持某些特性。

{
  "pages": [
    {
      "path": "pages/nvuePage",
      "style": {
        "navigationBarTitleText": "nvuePage",
        "renderer": "native"
      }
    }
  ]
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!