高度计算不到的原因
1.数据还没渲染上去,高度已经计算了,结果为null
2.页面里面嵌套组件,组件里面又嵌套组件,导致层级过多,获取不到高度,所以swiper
尽量写在页面里,不要放到组件中。
3.给动态计算高度的方法设置一个延时器setTimeout(()=>{动态计算的方法},500)
4.这个方法是目前最有用的
JS:
setExamHeight() {
console.log("setExam: " );
this.swiperHeight=860;
let windowHeight = uni.getSystemInfoSync().windowHeight;
//获取节点代码
const query = uni.createSelectorQuery();
query
.select('#adjustDetail')
.boundingClientRect(data => {
console.log('=======8===============');
console.log(data);
console.log('=======9===============');
if (data != null) {
this.swiperHeight = data.height * 2;
}
console.log('*************', this.swiperHeight);
})
.exec();
},
在接口请求成功里面
this.$nextTick(()=>{
this.setExamHeight()
})
<swiper class="swiper" :current="currentIndex1" @change="onchange1" :style="{ height: swiperHeight + 50 + 'rpx' }">
<swiper-item :indicator-dots="indicatorDots" v-for="(swiperItem,sIndex) in swiperItemNum1" :key="sIndex">
<view id="adjustDetail">
<uniTable border stripe emptyText="暂无更多数据">
<!-- 表头行 -->
<uniTr>
<uniTh align="center" width="60">序号</uniTh>
<uniTh align="center" width="100">年份</uniTh>
<uniTh align="center" width="60">成绩</uniTh>
<uniTh align="center" width="60">备注 </uniTh>
</uniTr>
<uniTr v-for="(item,index) in paginations1" :key="index">
<uniTd align="center" width="60">{{ index + 1 + pageSize * currentIndex1 }}</uniTd>
<uniTd align="center" width="100">{{ item.ssnf?item.ssnf+'年':'-' }}</uniTd>
<uniTd align="center" width="60">{{ item.cs?item.cs+'分': '-' }}</uniTd>
<uniTd align="center" width="60">{{ item.bz || '-' }}</uniTd>
</uniTr>
</uniTable>
</view>
</swiper-item>
</swiper>
5.我将uniapp的表格组件换成了uview的table组件多端兼容,然后出现了一个bug,页面第一次进去高度计算不准确,但是手动去切换swiper高度计算就准确了。
解决方法:将计算高度那里加一个定时器,将高度单位改为px 高度不乘以2了。ps:在此感谢部门何大佬解决bug(大佬说是官方bug,栈序列的问题,要等页面渲染完后再去计算高度,高度才是准确的)
this.$nextTick(() => {
setTimeout(()=>{
this.setExamHeight();
},0)
});