app端强制竖屏唯一有效方式是配置manifest.json的app-plus.orientation字段,ios需数组格式、android用字符串,pages.json的pageorientation对app无效,plus.screen.lockorientation须条件编译并在onshow延迟调用且需解锁。

App端强制竖屏必须改 manifest.json 原生配置,纯 JS 调用 plus.screen.lockOrientation 或 uni.setScreenOrientation 在真机上基本无效——iOS 静默拒绝,Android 12+ 常被系统拦截。
manifest.json 的 app-plus.orientation 是唯一生效入口
这个字段是 App 端横竖屏的“开关闸门”,没配它,后续所有 API 调用都直接被系统忽略。
- iOS 必须写成数组:
"app-plus.distribute.ios.orientation": ["portrait-primary", "portrait-secondary"];填字符串"portrait"或单个值会被忽略 - Android 对应位置是:
"app-plus.distribute.android.orientation": "portrait"(字符串即可,不区分主次) - 两个平台配置项互不兼容,不能混用;删掉
unpackage目录后必须重新云打包或制作自定义基座,热重载/真机调试不生效
pages.json 的 pageOrientation 对 App 完全无效
很多人把 pageOrientation: "portrait" 写在 pages.json 的 style 或 globalStyle 里,结果真机毫无反应——这是最常踩的坑。
- 该字段仅对微信小程序(
mp-weixin子节点下)、支付宝小程序(mp-alipay)和 H5 生效 - App 端完全无视
pages.json里的pageOrientation,写了等于没写 - 若你同时支持多端,别试图用同一套配置覆盖全部平台,App 必须走
manifest.json+plus.screen双保险
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()或切回默认方向,否则其他页面可能被意外锁住
真正起作用的永远是原生层配置:iOS 要改 Info.plist 里的 UISupportedInterfaceOrientations,Android 要确保 AndroidManifest.xml 中 Activity 带 android:screenOrientation="portrait"。uni-app 生成的基座已预设这些,但你改了 manifest.json 后,不重新打包,原生文件不会更新——这点最容易被忽略。











