uni-app 横屏时,之前竖屏状态栏有占位问题
uni-app 横屏时,之前竖屏状态栏有占位问题
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.36 |
手机系统 | Android |
手机系统版本号 | Android 12 |
手机厂商 | 华为 |
手机机型 | p40 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
<template>
<view class="tenglu-container">
<view class="tenglu-bg" />
<view class="tenglu-body" @click="showComModal">显示弹窗</view>
</view>
</template>
<script>
export default {
data() {
return {
};
},
onInit() {
},
onLoad() {
//横屏正方向
// #ifdef APP-PLUS
plus.screen.lockOrientation('landscape-primary')
plus.navigator.setFullscreen(true);
// #endif
},
methods: {
},
};
</script>
<style lang="scss" scoped>
.tenglu-body{
position: relative;
z-index: 10;
color: #fff;
}
.tenglu-bg{
position: fixed;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
background: #000;
}
</style>
操作步骤:
- 点击进入当前页面
预期结果:
- 黑色应该铺满全屏,显示弹窗文字应该在最左边
实际结果:
- 最左边有一个原竖屏时的状态栏占位
bug描述:
希望某个页面横屏-全屏,结果竖屏时候的状态栏还在
2 回复
找到原因了,manifest.json里面设置了statusbar.immersed
在处理uni-app横屏时状态栏占位问题,可以通过调整页面的样式和配置来确保在不同屏幕方向下都能正确显示。以下是一个具体的代码案例,展示了如何在uni-app中处理横屏和竖屏状态栏占位问题。
首先,确保在manifest.json
中配置了应用支持横屏显示:
{
"app-plus": {
"distribute": {
"apple": {
"orientation": ["portrait", "landscape"]
},
"android": {
"screenOrientation": "sensor"
}
}
}
}
接下来,在页面的样式文件中(如App.vue
或具体页面的.vue
文件中的<style>
部分),使用CSS媒体查询来处理横屏和竖屏的样式差异。
<template>
<view class="container">
<!-- 页面内容 -->
</view>
</template>
<style scoped>
/* 通用样式 */
.container {
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
box-sizing: border-box;
}
/* 竖屏样式 */
@media (orientation: portrait) {
.container {
/* 针对竖屏的特定样式 */
/* 例如,可以调整padding来适应竖屏状态栏 */
}
}
/* 横屏样式 */
@media (orientation: landscape) {
.container {
/* 针对横屏的特定样式 */
/* 例如,可以调整padding来适应横屏状态栏 */
padding-top: 0; /* 假设横屏时不需要额外的状态栏占位 */
}
}
</style>
在这个例子中,使用了env(safe-area-inset-*)
来确保页面内容不会被状态栏、导航栏或底部安全区域遮挡。这是uni-app提供的一种方式来适应不同设备的屏幕安全区域。
另外,如果需要在JavaScript中动态检测屏幕方向并调整样式,可以使用window.orientation
(虽然这在某些现代浏览器中已被弃用,但uni-app环境可能支持)或者监听resize
事件来检测屏幕大小变化,并据此调整页面布局。
export default {
mounted() {
window.addEventListener('resize', this.handleOrientationChange);
},
beforeDestroy() {
window.removeEventListener('resize', this.handleOrientationChange);
},
methods: {
handleOrientationChange() {
if (window.orientation === 90 || window.orientation === -90) {
// 横屏处理
} else {
// 竖屏处理
}
}
}
}
注意:window.orientation
在现代浏览器中可能不被推荐使用,但在uni-app的某些平台上可能仍然有效。更可靠的方法是使用screen.orientation.angle
或者监听screen.orientationchange
事件。不过,具体实现需根据uni-app的文档和平台兼容性来决定。