一、样式兼容性问题
问题描述:
不同平台(H5/小程序/App)对CSS的支持差异导致样式错乱,如flex布局异常、单位转换错误等。
解决办法:
在样式文件中针对不同平台适配:
/* #ifdef H5 */
.box { padding: 20upx; }
/* #endif */
/* #ifdef MP-WEIXIN */
.box { padding: 10upx; }
/* #endif */
优先使用upx(响应式u像素),避免px:
.title { font-size: 32upx; } /* 自动适配各平台 */
在App.vue中引入基础样式库:
@import "@/common/uni.css"; /* 包含各平台样式重置 */
二、跨平台API调用失败
问题描述:
部分API在某些平台不可用(如H5不支持uni.getSystemInfoSync())。
解决办法:
调用前检查平台支持性:
if (uni.getSystemInfo) {
const systemInfo = uni.getSystemInfoSync();
} else {
console.log("当前平台不支持此API");
}
创建utils/api.js封装平台差异:
export function safeGetLocation() {
// #ifdef H5
return h5Geolocation(); // 自定义H5定位方法
// #endif
// #ifdef APP-PLUS
return uni.getLocation();
// #endif
}
三、页面路由堆栈溢出
问题描述:
小程序平台页面栈深度限制(10层),导致navigateTo失败。
解决办法:
使用getCurrentPages()获取当前页面栈:
const pages = getCurrentPages();
if (pages.length < 9) {
uni.navigateTo({ url: "/pages/next" });
} else {
uni.redirectTo({ url: "/pages/next" }); // 替换当前页
}
对高频页面配置为Tab页:
// pages.json
"tabBar": {
"list": [{
"pagePath": "pages/home",
"text": "首页"
}]
}
四、原生组件层级问题
问题描述:
地图/视频等原生组件在iOS端层级最高,覆盖弹出层。
解决办法:
仅支持嵌套在原生组件内部的元素:
<map>
<cover-view class="tooltip">提示信息</cover-view>
</map>
弹出层显示时隐藏原生组件:
data() { return { showMap: true } },
methods: {
openPopup() {
this.showMap = false;
this.showPopup = true;
}
}
五、性能优化问题
问题描述:
长列表滚动卡顿,图片加载白屏。
解决办法:
- 使用<scroll-view>替代默认滚动
- 添加key属性:<view v-for="(item,index) in list" :key="item.id">
<scroll-view scroll-y style="height: 100vh">
<view v-for="item in bigData" :key="item.id">{{item.name}}</view>
</scroll-view>
启用lazy-load并指定尺寸:
<image
src="image.jpg"
lazy-load
mode="widthFix"
style="width: 100%"
></image>
六、打包体积过大
问题描述:
主包超过小程序平台限制(微信小程序2MB)。
解决办法:
配置pages.json:
{
"subPackages": [{
"root": "subpackage",
"pages": [{ "path": "moduleA" }]
}]
}
- 使用image-tools压缩图片
- 开启HBuilderX的"运行时压缩代码"选项
- 移除未使用的组件库
七、调试技巧
问题描述:
真机调试时无法查看日志。
解决办法:
开发环境注入调试面板:
// main.js
if (process.env.NODE_ENV === 'development') {
const VConsole = require('vconsole');
new VConsole();
}
App端使用plus.logger:
const log = plus.logger.getLogger("app");
log.info("调试信息");
最佳实践建议:
评论前必须登录!
注册