横屏全屏必须先锁方向,否则 setFullscreen 无效;需 manifest.json 声明横屏支持 + onLaunch 调用 plus.screen.lockOrientation;setFullscreen(true) 须在 onShow 中条件编译调用,并配合 CSS 变量 --status-bar-height 适配安全区域。

横屏全屏必须先锁方向,否则 setFullscreen 无效
很多开发者调了 plus.navigator.setFullscreen(true) 却发现状态栏还在,根本原因是系统在横屏后自动切回竖屏重绘——状态栏随之恢复。iOS 和部分 Android 机型尤其明显。
必须双保险:manifest.json 里声明横屏支持 + onLaunch 中立即锁定方向。
-
manifest.json的"app-plus"节点下加:"orientation": ["landscape-primary", "landscape-secondary"] -
App.vue的onLaunch中调用:plus.screen.lockOrientation('landscape-primary') - 不要在
onShow或页面级生命周期里锁方向,会闪屏或失效
setFullscreen(true) 必须放在 onShow 且带条件编译
横屏状态下隐藏状态栏,仍依赖 plus.navigator.setFullscreen(true),但它不是随时能调的。
- 只能在
onShow(或onLaunch)中调用,mounted/created时plus对象还没初始化,静默失败 - 必须包裹
#ifdef APP-PLUS,否则 H5 和小程序运行时报plus is not defined - 如果只是某个横屏页需要全屏,记得在
onHide里调plus.navigator.setFullscreen(false),否则退出后其他页面也被强制全屏
内容顶到屏幕最顶边?用 CSS 变量补安全区域
隐藏状态栏后,页面内容常被“顶上去”,尤其 iPhone X+ 或全面屏 Android,不是 CSS 写错了,而是没适配系统安全区域。
- 别用
uni.getSystemInfoSync().statusBarHeight—— iOS 返回真实像素,Android 常返回 24/25,全面屏机型不准,H5 和小程序甚至返回undefined - uni-app 在 App 端注入了可靠的 CSS 变量:
--status-bar-height,直接在根容器写:padding-top: var(--status-bar-height); - 如果用了
<uni-nav-bar>,必须设background-color="transparent",否则默认背景色会挡住状态栏区域
底部虚拟导航栏隐藏不了?是系统限制,不是代码问题
想连底部虚拟按键一起隐藏,调 plus.navigator.hideSystemNavigation() 看似合理,但实际在多数新系统上已失效。
- 小米 HyperOS、OPPO ColorOS 14+、华为 HarmonyOS 4+ 等系统已移除该 API 权限,调用无反应
- Android 12+ 厂商定制系统普遍禁用此能力,属于系统级限制,纯 JS 层无法绕过
- 真要实现“真全屏”,必须改原生层:
AndroidManifest.xml加android:theme="@style/FullscreenTheme",并在MainActivity.java中手动设置SYSTEM_UI_FLAG_IMMERSIVE_STICKY—— 这超出了 uni-app 默认能力范围
setFullscreen,等于白干;不加 #ifdef APP-PLUS,H5 和小程序直接报错;而指望 JS 层彻底干掉底部导航栏,现在基本是跟系统较劲。


















