取消 uni-app 全屏需显式调用 plus.navigator.setfullscreen(false) 并还原系统 ui,app 端必须在 onhide/onunload 中执行且包裹 #ifdef app-plus;pages.json 中 navigationstyle 需设为 "default",h5 端须配对调用 document.exitfullscreen() 并清除相关样式。

取消 uni-app 页面的全屏显示,核心在于「关掉之前设的全屏动作」+「还原被移除的系统 UI 区域」。只改 pages.json 或只调一个 API 都不能真正退出全屏——尤其在 App 端,plus.navigator.setFullscreen(true) 是有状态的,不显式关闭,它就一直生效。
App 端必须调用 plus.navigator.setFullscreen(false)
这是最常被忽略的一环:设置了全屏后,若没在页面离开前还原,其他页面也会被强制全屏(比如从视频页返回首页,首页顶部突然空白)。setFullscreen(false) 不是“可选善后”,而是必要清理动作。
- 必须放在
onHide或onUnload中调用,不能等到onDestroy——后者在 App 端可能已不触发 - 必须包裹
#ifdef APP-PLUS,否则 H5 和小程序会报plus is not defined - 如果之前还调了
plus.navigator.hideSystemNavigation(),这里也得配对调plus.navigator.showSystemNavigation(),但注意:该方法在小米 HyperOS、OPPO ColorOS 14+ 上已失效,调了也没反应,属于系统限制
pages.json 里别留 navigationStyle: "custom"
这个配置不是“页面级开关”,而是“全局导航栏控制权移交”。一旦设为 "custom",所有未显式覆盖该字段的子页面都会继承——即使你没写,它也默认生效。所以取消全屏,得主动还原。
- 在目标页面的
style节点下,明确写"navigationStyle": "default"(不是删掉这行) - 配套把
"app-plus": { "titleNView": false }改成true或直接删掉该字段,否则部分 Android 机型仍会渲染空白 title 区域 - 如果是在
globalStyle里全局设的navigationStyle: "custom",那必须逐页在pageStyle中覆盖,不能依赖“不写就默认”
H5 端没有真全屏,只有视觉模拟,退出也靠 DOM 还原
H5 的所谓“全屏”本质是 requestFullscreen() 对某个元素的调用,它受浏览器策略严格限制:必须由用户手势触发、不可自动进入/退出、且只能作用于当前激活的 iframe 或 。uni-app 框架本身不封装这一行为,得自己处理。
- 如果用了
document.documentElement.requestFullscreen(),退出时必须对应调document.exitFullscreen() - 别指望
screen.orientation.unlock()能起效——uni-app H5 环境下该 API 多数静默失败或抛DOMException - 页面样式上,记得清除之前加的
padding-top: 0 !important或height: 100vh类样式,否则内容会顶到顶部被截断
最容易踩的坑是:以为改回 pages.json 就完事,结果真机上全屏状态还在;或者 H5 端点了退出按钮却没调 exitFullscreen(),导致地址栏卡死不出现。全屏不是“配置态”,而是“运行时状态”,退出必须靠代码显式归零。











