manifest.json中状态栏配置仅对ios原生导航栏生效,android和h5完全不读,小程序不识别;启用navigationstyle:"custom"后该配置彻底失效,真正生效的是pages.json中的页面级配置和条件编译下的原生api调用。

manifest.json 里配状态栏只对 iOS 生效
Android 和 H5 完全不读 manifest.json 里的状态栏配置,微信小程序更压根不识别这个文件。你改了 app-plus 下的 statusbar 字段,只会影响 iOS 真机打包后的原生层表现——而且仅限于「未启用 navigationStyle: "custom"」的页面。
常见错误现象:
- 改完
manifest.json发现 Android 状态栏还是黑的、文字颜色没变 - 在 H5 或小程序里调试,发现配置完全没反应
- 启用了
navigationStyle: "custom"后,manifest.json的statusbar配置彻底失效(因为控制权已交出)
正确用法只有两种场景:
- iOS 原生导航栏未被 custom 覆盖时:用
"style": "light"或"style": "dark"控制状态栏文字颜色 - iOS 需要透明状态栏底色时:必须同时设
"background": "rgba(0,0,0,0)",且"style"要匹配文字色(比如背景透明但文字要白,就得配"style": "light")
pages.json 才是真正起作用的配置入口
manifest.json 是全局静态声明,而 pages.json 才是 uni-app 实际渲染时读取并注入 CSS 变量的源头。尤其当你用了 navigationStyle: "custom",所有状态栏行为都得靠它驱动。
关键点:
-
--status-bar-height这个 CSS 变量只在pages.json中设了"navigationStyle": "custom"的页面才可用 -
pages.json里必须同时配"titleNView": false(App 端),否则某些 Android 机型仍会预留空白标题区 - 想让状态栏区域内容可滚动/可交互,不能只靠
manifest.json,必须在页面根容器加padding-top: var(--status-bar-height)
为什么 setNavigationBarColor 在 iOS 上总失效
因为 uni.setNavigationBarColor 只作用于原生导航栏,而你已经在 pages.json 里设了 "navigationStyle": "custom" —— 此时原生栏根本不存在,API 调了也白调。
真实生效的方案只有两个:
- iOS 下用
uni.setStatusBarStyle('light')或'dark'主动切换状态栏文字颜色(注意:必须在onReady或之后调用,onLoad太早) - 搭配自定义导航栏背景明暗变化,动态触发
setStatusBarStyle:比如导航栏背景变浅时切'dark',变深时切'light'
真机调试时容易忽略的细节
模拟器和 HBuilderX 内置浏览器几乎不还原状态栏行为,很多样式问题只在正式打包的 iOS/Android 包里暴露。最常踩的坑是:
- 没打正式包就测试
manifest.json配置,结果全是假象 - 在
onLoad里调uni.getSystemInfo()拿statusBarHeight,返回值为 0(应等onReady后再取getComputedStyle(...).getPropertyValue('--status-bar-height')) - 以为配了
manifest.json就一劳永逸,结果下拉刷新时安卓状态栏突然变黑——这其实是 webview 下拉导致的渲染层错乱,跟 manifest 无关











