uniapp开发小程序,使用uview组件库,获取自定义tabbar组件高度。

uview中获取自定义tabbar组件高度

业务场景
  • tabbar动态内容,各页面独立tabbar
  • 多选框吸附底部tabbar,适配不同设备
技术实现方案
  • 获取u-tabbar组件高度,多选框动态样式绑定
  • 上代码
# 多选框动态样式绑定
<view class="checked_all" :style="{bottom:onReachBottom + 'px'}">
	<u-checkbox-group>
		<u-checkbox label='全选' :checked="isAllChecked" shape="circle" @change="allChoose">
		</u-checkbox>
	</u-checkbox-group>
	<view class="btn">
		<u-button color="linear-gradient( 270deg, #19D380 0%, #0CBBAA 100%)" shape="circle" text="处理"></u-button>
	</view>
</view>
# 组件加载完成后获取元素高度
onReady() {
			const query = uni.createSelectorQuery().in(this.$refs.customTabBar);
			query
				.select("#customTabBar >>> .u-tabbar__content")//跨自定义组件的后代选择器
				.boundingClientRect((data) => {
					console.log("得到布局位置信息", data);
					this.onReachBottom = data.height
				})
				.exec();
		},
# 自定义tabbar组件
<template>
	<u-tabbar id="customTabBar" :value="currentTab" @change="switchTab" inactiveColor="#A1A1A1" activeColor="#333333">
		<u-tabbar-item :text="item.name" v-for="item,index in list" :key="index">
			<image class="tabbar-cion" slot="active-icon" :src="config.ossUrl + item.activeIcon">
			</image>
			<image class="tabbar-cion" slot="inactive-icon" :src="config.ossUrl +item.inactiveIcon"></image>
		</u-tabbar-item>
	</u-tabbar>
</template>

效果图如下

![请添加图片描述](https://i-blog.csdnimg.cn/direct/d081b619f29d4f53a15ebec9a462e510.png请添加图片描述

  • 使用uni.createSelectorQuery() 获取 u-tabbar组件高度时需要选择.u-tabbar-content类名 ,.u-tabbar获取节点信息会返回null,使用.u-tabbar__placeholder类名可能是渲染问题高度会返回0,需要加定时器延时才能获取真实高度。
  • 经测试,iPhone、安卓无底部虚拟按键、有虚拟按键下都可实现吸附效果。
使用 UniApp 开发微信小程序自定义底部 `tabbar` 时,可能会遇到一些与兼容性、配置或运行环境相关的错误。以下是可能的解决方案和注意事项: ### 自定义底部 tabbar 的常见问题及解决方法 1. **确保正确引入自定义 tabbar 组件** 在 UniApp 中实现自定义底部 `tabbar` 时,通常需要创建一个独立的组件(如 `custom-tabbar.vue`),并在页面中引用该组件。确保组件路径正确,并且在页面中通过 `import` 引入并在 `components` 中注册。 ```vue <template> <view> <!-- 页面内容 --> <custom-tabbar /> </view> </template> <script> import CustomTabbar from '@/components/custom-tabbar.vue'; export default { components: { CustomTabbar } }; </script> ``` 2. **检查 app.json 配置文件是否关闭默认 tabbar** 如果希望完全自定义底部导航栏,应避免使用系统默认的 `tabbar` 配置。可以在 `app.json` 文件中删除或注释掉 `tabBar` 节点,以防止冲突 [^1]。 ```json { "pages": ["pages/index/index", "pages/logs/logs"], "window": { "navigationBarTitleText": "Demo" }, // "tabBar": { ... } // 禁用默认 tabbar } ``` 3. **适配真机运行中的样式和状态问题** 在某些情况下,模拟器无法准确反映真机上的行为,例如图标状态切换异常或布局渲染不一致。建议在开发过程中频繁使用**真机调试功能**,特别是在处理交互逻辑和动画效果时 [^2]。 4. **处理依赖缺失或编译错误** 如果在启动项目时出现类似 `regeneratorRuntime is not defined` 或 `xxx.js 找不到` 的错误,可能是由于依赖未正确加载或打包失败。可尝试以下操作: - 清理缓存后重新构建项目。 - 更新 HBuilderX 和相关插件版本。 - 检查 `unpackage` 目录下是否存在 `app.js` 和 `app.json` 文件 [^4]。 5. **使用 uView UI 框架进行自定义 tabbar 设计** uView 是一个专为 uni-app 设计的 UI 框架,支持跨平台开发,包括微信小程序。可以通过 uView 提供的 `u-tabbar` 组件快速构建自定义底部导航栏,并利用其内置的图标库和主题配置能力提升开发效率 [^3]。 ```vue <template> <u-tabbar :list="tabList" :mid-button="false"></u-tabbar> </template> <script> export default { data() { return { tabList: [ { iconPath: 'home.png', selectedIconPath: 'home_active.png', text: '首页' }, { iconPath: 'user.png', selectedIconPath: 'user_active.png', text: '我的' } ] }; } }; </script> ``` 6. **优化性能与交互体验** 自定义 `tabbar` 可能会影响页面切换流畅度或导致内存占用过高。建议对组件进行懒加载或使用 `v-if` 控制组件生命周期,避免不必要的渲染。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值