uni-app 横屏APP设置单页竖屏 样式错乱
uni-app 横屏APP设置单页竖屏 样式错乱
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 17763.914 | HBuilderX |
# 操作步骤:
```javascript
onShow(){
plus.screen.lockOrientation('portrait-primary');//强制竖屏
},
onUnload() {
plus.screen.lockOrientation('landscape-primary');//强制横屏
}
预期结果:
onShow(){
plus.screen.lockOrientation('portrait-primary');//强制竖屏
},
onUnload() {
plus.screen.lockOrientation('landscape-primary');//强制横屏
}
实际结果:
第二次加载 横屏样式错乱
bug描述:
APP为平板定制应用 大部分页面横屏 只有一页是竖屏
app.vue
onLaunch: function() {
plus.screen.lockOrientation('landscape-primary'); //强制横屏
},
A页[横屏]正常 => B页[横屏]正常 => C页[竖屏]正常
返回 C页[竖屏]正常 => B页[横屏]正常 => A页[横屏]正常 再次进入 => B页[横屏]样式错乱
返回页面样式正常 第二次加载就样式错乱 第三次加载则正常
C页竖屏写法为
onShow(){
plus.screen.lockOrientation('portrait-primary');//强制竖屏
},
onUnload() {
plus.screen.lockOrientation('landscape-primary');//强制横屏
}
更多关于uni-app 横屏APP设置单页竖屏 样式错乱的实战教程也可以访问 https://www.itying.com/category-93-b0.html
13 回复
onShow(){
setTimeout(()=>{
// 为什么要延迟横屏,再加载weView呢?
// 那是因为,uni-app转安卓有个很严重的bug。这个单个页面需要强制横屏,在onLoad,onReady,onShow阶段横屏都会导致它之前或者之后的页面产生布局异常(无解)
// 但是wb-view也需要在加载资源的时候获取横屏的宽高来进行布局。所以为了获取到的是横屏后的宽高,也要在横屏后再渲染web-view
this.canStartWeb = true
},1000)
},
没有人给解决吗?
这是一个uni-app中横竖屏切换导致的样式渲染问题。核心原因是屏幕方向切换时,页面布局没有及时重新计算。
解决方案建议:
- 在横竖屏切换时,强制触发页面重绘:
onShow(){
plus.screen.lockOrientation('portrait-primary');
// 添加重绘逻辑
this.$nextTick(() => {
window.dispatchEvent(new Event('resize'));
});
}
- 或者在manifest.json中配置全局横屏,仅对特定页面设置竖屏:
"app-plus": {
"screenOrientation": ["landscape-primary"]
}
-
检查页面样式是否使用了固定尺寸,建议改用响应式单位(如rpx)或百分比布局。
-
在页面生命周期中添加resize事件监听:
onLoad() {
window.addEventListener('resize', this.handleResize);
},
onUnload() {
window.removeEventListener('resize', this.handleResize);
},
methods: {
handleResize() {
// 处理布局调整
}
}