App端强制竖屏必须配置manifest.json原生参数:iOS需设app-plus.distribute.ios.orientation为["portrait-primary","portrait-secondary"],Android需设app-plus.distribute.android.orientation为"portrait";JS调用plus.screen.lockOrientation或uni.setScreenOrientation在真机基本无效。

App端强制竖屏必须改 manifest.json 原生配置,纯 JS 调用 plus.screen.lockOrientation 或 uni.setScreenOrientation 在真机上基本无效——iOS 会静默拒绝,Android 12+ 也常被系统拦截。不配原生层,“锁竖屏”就是空谈。
manifest.json 必须配置的两项
这是 App 端竖屏的“开关闸门”,漏一项,后续所有 JS 尝试都直接被忽略。
- iOS:在
app-plus.distribute.ios.orientation下填数组["portrait-primary", "portrait-secondary"];填字符串"portrait"或单个值会被忽略 - Android:在
app-plus.distribute.android.orientation下填字符串"portrait"即可(不区分主次) - 两个平台配置项互不兼容,不能混写;删掉
unpackage目录后必须重新云打包或制作自定义基座,热重载/真机调试不生效
plus.screen.lockOrientation 调用时机和容错写法
该 API 只在 App 端有效,但极易因时机不对或未包裹条件编译而失败。
- 必须用
#ifdef APP-PLUS包裹,否则 H5 或小程序编译报plus is not defined - 不能在
onLoad立即调用——部分 Android 机型 WebView 尚未就绪,建议在onShow中加setTimeout延迟 800ms 再执行 - 返回值是 Promise,但失败时仍 resolve,务必检查
res.result === 'fail',不能只看是否进.then - 页面卸载前必须调用
plus.screen.unlockOrientation()或切回默认方向,否则其他页面可能被意外锁住
为什么 uni.setScreenOrientation 在真机上大概率失效
这不是你代码问题,而是系统限制升级导致的必然结果。
- iOS 从早期就禁止 Web 层强制旋转,调用
uni.setScreenOrientation静默失败,不报错也不生效 - Android 12+ 要求 Activity 显式声明
android:screenOrientation,uni-app 基座虽已处理,但若你用了自定义原生插件或修改过AndroidManifest.xml,可能破坏该声明 -
pages.json里的pageOrientation: "portrait"在 App 端完全被忽略——它只对小程序和 H5 生效 - CSS 的
transform: rotate(90deg)是视觉假旋转,会导致触摸坐标错乱、Canvas 尺寸异常、键盘弹出失败,音视频/游戏类场景绝对禁用
最容易被忽略的是:配置改完没删 unpackage 目录,也没重新云打包。很多开发者卡在这一步,反复改 JS 却不碰 manifest,最后以为框架有问题。











