uni-app App端强制横屏必须双端分别配置manifest.json及原生文件:iOS需在app-plus.distribute.ios.orientation设数组["landscape-primary","landscape-secondary"],并手动修改Info.plist添加UISupportedInterfaceOrientations;Android需在app-plus.distribute.android.orientation设字符串"landscape",并为每个activity添加android:screenOrientation="landscape";缺一不可,且须清空unpackage目录后重新云打包。

manifest.json 配置必须配对 iOS 和 Android 两套字段
只改 app-plus.distribute.ios.orientation 或只改 app-plus.distribute.android.orientation 都不行,App 端横屏是双端独立生效的。iOS 必须填数组:["landscape-primary", "landscape-secondary"];Android 必须填字符串:"landscape"。填 "landscape" 到 iOS 字段、或填数组到 Android 字段,都会被忽略。
原生文件不手动改,配置等于没写
manifest.json 只是“指令”,真正起作用的是编译后生成的原生工程文件:
- iOS:打开
unpackage/res/ios/Info.plist,手动添加UISupportedInterfaceOrientations键,值为两个string:UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight - Android:打开
unpackage/res/android/AndroidManifest.xml,找到所有用到的<activity>(包括主页面、subNVue 页面对应 activity),每个都加属性:android:screenOrientation="landscape"
漏掉任意一个 <activity>,对应页面就会竖屏或旋转异常。
真机不生效?大概率卡在打包缓存和时机上
改完配置后常见失效原因:
- 没删
unpackage目录,旧原生工程残留 —— 必须清空后重新云打包或重装自定义基座 - 用“运行到手机”调试 —— 这个按钮不触发原生配置更新,只跑 JS 层,永远不生效
- 在
onLoad里调uni.setScreenOrientation—— 它只在onShow中有意义,因为用户切后台再回来时方向可能已变
注意:uni.setScreenOrientation 在 iOS 真机返回 { result: 'fail', errMsg: '' },Android 12+ 也常静默失败;它不是 bug,而是系统权限限制,别把它当主力方案。
只想某一页横屏?别指望 pages.json 的 pageOrientation
pages.json 里的 pageOrientation: "landscape" 在 App 端完全被忽略 —— 它只对微信/支付宝小程序和 H5 生效。想实现“首页竖屏 + 游戏页横屏”,唯一可靠路径是:
- 把游戏页做成独立
subNVue页面,或用原生插件封装 - 为其单独配置对应的
<activity>(Android)或ViewController(iOS)并锁定横屏 - 视频播放等临时场景可用
plus.screen.lockOrientation('landscape'),但退出后必须手动plus.screen.lockOrientation('portrait-primary')恢复,否则页面卡住
最易被忽略的一点:Canvas、触摸、键盘等底层行为全依赖系统真实方向,CSS transform: rotate(90deg) 是假横屏,会导致坐标错乱,游戏或交互类页面绝对不能用。


















