必须先调plus.navigator.setfullscreen(true)再调videocontext.requestfullscreen(),且退出时须监听@fullscreenchange并执行setfullscreen(false)恢复状态栏。

App端视频全屏时状态栏仍显示?必须分两步走
uni-app里video组件调用requestFullScreen()后状态栏还在,不是API没生效,而是它只触发原生播放器全屏,不联动系统UI控制。状态栏是否隐藏,和视频全屏是两个独立流程——前者靠plus.navigator.setFullscreen(true),后者靠videoContext.requestFullScreen(),缺一不可。
- 必须在用户点击事件中先调
plus.navigator.setFullscreen(true)(确保状态栏已隐藏),再调videoContext.requestFullScreen();反过来或异步调用都可能失败 -
direction参数要设为90或-90,iOS下0常被忽略,Android对direction敏感度低但也要显式传 - 别在
onLoad或mounted里预调——手势缺失会导致requestFullScreen()直接抛NotAllowedError,状态栏虽隐藏了,视频却卡在非全屏态
H5端无法隐藏状态栏,别白费劲
H5没有真正“隐藏状态栏”的能力,浏览器限制决定了document.documentElement.requestFullscreen()只能进入浏览器级全屏,顶部状态栏由系统控制,JS无法触达。所谓“H5全屏隐藏状态栏”全是错觉。
- manifest.json里加
"orientation": "all"只影响横屏行为,和状态栏无关 - CSS写
height: 100vh或top: 0不能顶掉状态栏,反而可能造成内容被截断 - 若页面以PWA方式安装,可尝试
<meta name="viewport" content="viewport-fit=cover">配合env(safe-area-inset-top)做视觉补偿,但真机状态栏依然存在
小程序端状态栏根本不可隐藏
微信/支付宝等小程序平台明确禁止JS控制状态栏可见性,video全屏时状态栏必然保留。你看到的“隐藏”,其实是video原生层把状态栏区域盖住了,但系统状态栏本身仍在运行。
-
@fullscreenchange事件里的e.detail.fullScreen为true,不代表状态栏消失,只是video占满屏幕 - 试图用
cover-view覆盖状态栏区域会失败——全屏后cover-view脱离渲染树,直接不显示 - 唯一能动的是导航栏:
wx.setNavigationBarColor()可改色,但对状态栏无效;胶囊按钮更无法移除
退出全屏后状态栏没恢复?这是最常漏的一步
很多人只记得进全屏时隐藏状态栏,却忘了退出后手动恢复。iOS尤其明显:退出video全屏后,状态栏没回来,整个App页面卡在横屏+无状态栏状态,直到切后台再切回。
- 必须监听
@fullscreenchange,当e.detail.fullScreen === false时立即执行:uni.setScreenOrientation({ orientation: 'portrait' })+plus.navigator.setFullscreen(false) - 别在该回调里再调
exitFullScreen()或重复requestFullScreen(),容易触发循环或静默失败 - 如果页面本身支持横屏,
setScreenOrientation要按需切换,而不是硬写portrait——否则横屏视频页退出后强制竖屏,体验断裂
setFullscreen(false)。











