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+也常被系统拦截。不配原生层,所有JS层尝试都是徒劳。
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目录后必须重新云打包或制作自定义基座,热重载/真机调试不生效
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()或切回默认方向,否则其他页面可能被意外锁住
pages.json 的 pageOrientation 对 App 端完全无效
很多人把pageOrientation: "portrait"写在pages.json的style或globalStyle里,结果真机毫无反应——这是最常踩的坑。
- 该字段仅对微信小程序(
mp-weixin子节点下)、支付宝小程序(mp-alipay)和H5生效 - App端完全无视
pages.json里的pageOrientation,写了等于没写 - 若你同时支持多端,别试图用同一套配置覆盖全部平台,App必须走
manifest.json + plus.screen双保险
真正起作用的永远是原生层配置:iOS要改Info.plist里的UISupportedInterfaceOrientations,Android要确保AndroidManifest.xml中Activity带android:screenOrientation="portrait"。uni-app生成的基座已预设这些,但一旦你引入自定义原生插件或修改过原生工程,就得手动核对——漏掉任意一环,竖屏就只是“看起来像”。


















