在UniApp中,横竖屏切换时样式错乱通常是由于屏幕尺寸变化导致CSS布局不适应。以下是解决方案:
- 
使用响应式单位:在CSS中避免使用固定像素(px),改用相对单位如rpx(推荐)、vw、vh或百分比。UniApp的rpx会根据屏幕宽度自适应。
 
- 
监听屏幕旋转事件:通过JavaScript动态调整样式。
- 添加事件监听:
// 在页面onLoad或onReady中
plus.screen.lockOrientation("portrait-primary"); // 可选:锁定竖屏
window.addEventListener("orientationchange", this.handleOrientationChange);
 
- 处理函数:
handleOrientationChange() {
  // 根据屏幕方向重新计算样式或加载不同CSS
  const orientation = window.orientation;
  if (orientation === 90 || orientation === -90) {
    // 横屏逻辑,例如更新data中的变量
    this.setData({ isLandscape: true });
  } else {
    // 竖屏逻辑
    this.setData({ isLandscape: false });
  }
}
 
 
- 
CSS媒体查询:根据屏幕方向应用不同样式。
/* 竖屏样式 */
[@media](/user/media) (orientation: portrait) {
  .container {
    flex-direction: column;
  }
}
/* 横屏样式 */
[@media](/user/media) (orientation: landscape) {
  .container {
    flex-direction: row;
  }
}
 
- 
动态类名绑定:结合数据变量切换样式。
 
- 
锁定屏幕方向:如果应用不需要横屏,可在pages.json中配置:
{
  "globalStyle": {
    "pageOrientation": "portrait" // 强制竖屏
  }
}
或使用API:plus.screen.lockOrientation("portrait");
 
总结:优先使用响应式布局(如Flex或Grid)和相对单位,结合事件监听和媒体查询动态调整。如果不需要横屏,直接锁定方向即可避免问题。测试时务必在真机上验证,因为模拟器可能无法完全模拟屏幕旋转行为。