navigationBarTitleText静态配置最简单但仅适用于纯文字且未启用custom导航栏的场景;启用custom后需自行实现标题组件,uni.setNavigationBarTitle()失效。

直接用 navigationBarTitleText 静态设标题最简单,但仅适用于纯文字、不需动态更新的场景;一旦启用 navigationStyle: "custom",标题就得自己写进组件里,uni.setNavigationBarTitle() 就彻底失效。
pages.json 里配 navigationBarTitleText 是最快路径
这是绝大多数页面该用的方式:在 pages.json 对应页面的 style 中加一行配置即可生效,无需写 JS。
- 只对原生导航栏有效 —— 即未设置
navigationStyle: "custom"的页面 - 中文、emoji、空格都支持,但超长会被截断(微信小程序建议 ≤12 字)
- H5 端会 fallback 到
document.title,App 端走原生渲染,性能更好 - 不能嵌图标、按钮、搜索框,也不是 DOM 节点,没法绑定事件或响应式更新
示例:
{"path":"pages/detail/detail","style":{"navigationBarTitleText":"订单详情"}}
uni.setNavigationBarTitle() 动态改标题必须卡准时机
这个 API 看似通用,但实际限制极多,错一个条件就白调用。
- 必须在
onReady或之后调用;onLoad里有时能成功(尤其 App 端),但微信小程序真机上大概率失效 - H5 端完全不走原生逻辑,只改
document.title,页面内导航栏视觉不变 - 如果页面启用了
navigationStyle: "custom",该 API 直接被忽略,无任何报错 - QQ 小程序在
onShow中调用需加setTimeout(() => {}, 100),否则常被覆盖
跨端安全写法:
onReady() { if (process.env.UNI_PLATFORM === 'h5') { document.title = this.pageTitle || '加载中'; } else { uni.setNavigationBarTitle({ title: this.pageTitle || '加载中' }); }}
启用 navigationStyle: "custom" 后标题得自己“写”出来
这不是“设置”,而是“实现”——你得用 <view> 搭结构、用 CSS 控制居中、手动处理状态栏高度和安全区。
- 必须用
uni.getSystemInfoSync().statusBarHeight获取状态栏高度,并通过padding-top或env(safe-area-inset-top)顶上去,否则标题被遮住 - 标题文字是普通
<text>或<span>,可绑定v-model、加点击事件、插 slot - 平台差异大:iOS 需适配安全区,Android 部分厂商对
env()支持弱,建议 fallback 到像素值 -
<uni-nav-bar>组件的left-icon/right-icon属性在此模式下才真正起作用
常见坑:padding-top: env(safe-area-inset-top) 在 H5 和旧版微信里不识别,得加降级:
padding-top: calc(var(--status-bar-height, 0px) + 44px);
titleNView 配置容易误以为能动态控制标题
titleNView 是 App 端专属能力,但它不响应 JS 设置,也不读取 uni.setNavigationBarTitle(),只认 pages.json 里硬写的 text 或占位符 "{title}"。
- 微信小程序不支持
titleNView,写了也无效 - 支付宝小程序要求配合
"type": "transparent"才能自定义样式,否则强制系统默认 - 若要用占位符动态更新,得靠
uni.setStorageSync('title', xxx)+ 页面onShow里触发重绘(仅 App 有效) - vue3 项目中,
titleNView的 text 绑定可能因响应式时机晚于渲染而显示为空,建议用 computed 或 watch 显式同步
最易被忽略的一点:很多人想“既用 custom 导航栏,又保留原生标题控制权”,这在技术上不可行。要么全交由系统管理(删掉 navigationStyle: "custom"),要么彻底接管(标题变成你组件里的一个 <text>)。混用只会导致行为不一致、调试困难、平台兼容性崩坏。


















