应使用 titleNView.buttons 配置纯文本按钮实现 App 端版本号显示,H5/小程序端需降级为自定义导航栏并手动避让胶囊按钮;right-text 因多端渲染机制差异导致错位、遮挡或不可点击,且不支持动态值。

导航栏右侧显示版本号,不能用 uni-nav-bar 的 right-text 属性直接填版本号——H5 和小程序端会错位、截断或被胶囊按钮遮挡;App 端则根本无法响应点击(如果误加了事件)。
为什么 right-text 在多端表现不一致
这个属性本质是 Web 渲染层的简易文本插入,不参与原生导航栏布局计算:
- H5 端:
right-text会被强制缩进,且超出宽度时直接省略(无 ellipsis),uni-app不做截断控制 - 微信小程序:胶囊按钮(右上角三个点)会覆盖在
right-text上方,尤其在 iOS 小屏设备上几乎不可见 - App 端:
right-text渲染在 WebView 内容区顶部,和原生导航栏分离,视觉上“悬浮”但实际位置错乱
真机可用的方案:用 titleNView.buttons 配置纯文本按钮(仅限 App)
这是唯一能在 App 端稳定显示、靠右、不被遮挡、且可点击的方式。注意它只对 app-plus 生效:
- 在
pages.json对应页面的style.app-plus.titleNView.buttons中添加一个按钮 -
text填版本号字符串(如"v2.3.1"),fontSrc留空,float必须为"right" - 字体大小、颜色由
titleNView的textColor和backgroundColor控制,无法单独设置 - 点击事件必须用
onNavigationBarButtonTap捕获,不能绑定@click
{
"path": "pages/index/index",
"style": {
"app-plus": {
"titleNView": {
"buttons": [{
"text": "v2.3.1",
"float": "right",
"fontSize": "14px",
"textColor": "#999"
}]
}
}
}
}H5 / 小程序端必须降级为自定义导航栏 + 手动定位
因为 titleNView 不生效,只能放弃原生导航栏,改用 uni-nav-bar 或纯 <view> 实现,并手动避让胶囊按钮:
- 先在
pages.json中设"navigationStyle": "custom" - 用
wx.getMenuButtonBoundingClientRect()(小程序)或uni.getSystemInfo()(H5)获取胶囊位置,计算出右侧安全区域 - 把版本号
<text>放在自定义导航栏内,用position: absolute; right: Xpx;定位,X = 胶囊左边界 - 自身宽度 - 间距 - 别用
right-text,它不支持动态值,也不支持样式微调
最易被忽略的一点:版本号通常是动态读取 manifest.json 或构建环境变量的,但 titleNView.buttons.text 是静态 JSON 字符串,无法写表达式。所以 App 端的版本号必须在构建时注入(如用 webpack DefinePlugin 替换占位符),否则上线后就固定了。


















