uniapp动态计算swiper的高度

高度计算不到的原因

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)
					});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值