当前位置: 首页 > article >正文

uni-app 界面TabBar中间大图标设置的两种方法

一、前言

最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标):
在这里插入图片描述

方法一:midButton的使用

官方文档:tabber配置
在这里插入图片描述

注意: midButton没有pagePath,需监听点击事件,自行处理点击后的行为逻辑。监听点击事件为调用API:uni.onTabBarMidButtonTap;

配置方法
1. page.json
{
// ...其他配置
"tabBar": {
		"color": "#808080",
		"selectedColor": "#F0222C",
		"borderStyle": "black",
		"backgroundColor": "#ffffff",
		"list": [
			{
				"pagePath": "pages/index/index",
				"iconPath": "static/images/tabbar/home.png",
				"selectedIconPath": "static/images/tabbar/home_active.png",
				"text": "我的"
			},
			{
				"pagePath": "pages/study/index",
				"iconPath": "static/images/tabbar/study.png",
				"selectedIconPath": "static/images/tabbar/study_active.png",
				"text": "学习"
			},
			{
				"pagePath": "pages/dangwu/index",
				"iconPath": "static/images/tabbar/dangwu.png",
				"selectedIconPath": "static/images/tabbar/dangwu_active.png",
				"text": "党务"
			},
			{
				"pagePath": "pages/mine/index",
				"iconPath": "static/images/tabbar/mine_active.png",
				"selectedIconPath": "static/images/tabbar/mine.png",
				"text": "我的"
			}
		],
		"midButton": {
			// 调整这里面的width、height、iconWidth 就可以实现图标位置、大小的调整
			"width": "60px",
			"height": "72px",
			"iconWidth": "50px",
			"iconPath": "static/images/tabbar/dangzuzhi.png",
			"text": "党组织"
		}
	}
}
2. 监听事件病自定义导航 App.vue
onLaunch: function() {
	console.log('App Launch')
	
	// 监听底部tabbar 中间按钮“党组织”,跳转对应的页面
	uni.onTabBarMidButtonTap(() => {
		uni.navigateTo({
			url: '/pages/dangzuzhi/index',
		});
	})
}

注意: 该方法跳转后是进入二级页面,底部导航栏会消失,顶部会有返回按钮。适应于新增类型的页面。

方法二:iconfont 的使用

在这里插入图片描述

使用方法:在 tabbar 里面配置 iconfontSrc 属性(字体文件),然后在 list 数组里面,在想要的tab使用 iconfont 代替 iconPath 。如下:

"tabBar": {
		"color": "#808080",
		"selectedColor": "#F0222C",
		"borderStyle": "black",
		"backgroundColor": "#ffffff",
		"iconfontSrc": "static/font/iconfont.ttf",
		"list": [
			{
				"pagePath": "pages/index/index",
				"iconPath": "static/images/tabbar/home.png",
				"selectedIconPath": "static/images/tabbar/home_active.png",
				"text": "我的"
			},
			{
				"pagePath": "pages/study/index",
				"iconPath": "static/images/tabbar/study.png",
				"selectedIconPath": "static/images/tabbar/study_active.png",
				"text": "学习"
			},
			{
				"pagePath": "pages/dangzuzhi/index",
				"text": "党组织",
				"iconfont": { // 优先级高于 iconPath,该属性依赖 tabbar 根节点的 iconfontSrc
					// 此处需要注意,从阿里巴巴图标库中复制下来的图标代码是,需要将&#xe转换为\ue
					"text": "\ue750",
					"selectedText": "\ue750",
					"fontSize": "22px",
					"color": "#808080",
					"selectedColor": "#F0222C"
				}
			},
			{
				"pagePath": "pages/dangwu/index",
				"iconPath": "static/images/tabbar/dangwu.png",
				"selectedIconPath": "static/images/tabbar/dangwu_active.png",
				"text": "党务"
			},
			{
				"pagePath": "pages/mine/index",
				"iconPath": "static/images/tabbar/mine_active.png",
				"selectedIconPath": "static/images/tabbar/mine.png",
				"text": "我的"
			}
		]
	}

此时,icon 能显示出来了,但可能样式还有点不符合我们的需求,我们可以在全局样式问题 uni.scss 进行调整:

.uni-tabbar-bottom .uni-tabbar .uni-tabbar__item:nth-child(4) .uni-tabbar__icon {
	width: 46px !important;
	height: 46px !important;
	color: #fff;
	background: linear-gradient(45deg, #F0222C, #FF8F2C);
	border-radius: 50%;
	position: relative;
	top: -20px;
	left: 0px;
	margin-bottom: -20px;
	.uni-tabbar__iconfont {
		width: 46px;
		height: 46px;
		position: relative;
		top: 10px;
	}
}

注意:这样调整了样式,在H5端显示是正常的,但 App 端 表现可能不尽人意,修改的样式不生效(因为有兼容性的问题)。
在这里插入图片描述

方法三、折中方案(解决)

折中方案还是基于 midButton ,官方问题有这么一句话:midButton 中间按钮 仅在 list 项为偶数时有效。而 list 数组里面有这个一个属性 visible:该项是否显示,默认显示
 
所以,我添加了两个不显示的 tabbar (设置visible为false);然后设置 midButton 配置大图标即可。
 
但是:请注意,tab 的列表,详见 list 属性说明,最少2个、最多5个 tab;添加了两个不可见的tab后,就有6个了。但目前看来还是没啥问题!!

 
 
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!


http://www.kler.cn/a/405090.html

相关文章:

  • 循环输出1~100之间的每个数
  • reactflow 中 useStoreApi 模块作用
  • 蓝桥杯每日真题 - 第17天
  • ant-design-vue中table组件多列排序
  • yolov5 数据集分享:纯干货
  • qt学习:linux监听键盘alt+b和鼠标移动事件
  • CentOs7静态IP地址配置方法
  • 低音运行,约克VRF中央空调让居家生活静享安宁
  • C++小白实习日记——Day 1 怎么跑github上下载的程序
  • Mybatis框架之代理模式 (Proxy Pattern)
  • Redis三剑客:缓存雪崩、缓存穿透、缓存击穿
  • 国标GB28181设备管理软件EasyGBS国标GB28181视频平台:RTMP和GB28181两种视频上云协议的区别
  • RNN简单理解;为什么出现Transformer:传统RNN的问题;Attention(注意力机制)和Self-Attention(自注意力机制)区别;
  • SQLAlchemy,ORM的Python标杆!
  • 嵌入式硬件电子电路设计(六)LDO低压差线性稳压器全面详解
  • 音视频入门基础:MPEG2-TS专题(6)——FFmpeg源码中,获取MPEG2-TS传输流每个transport packet长度的实现
  • 开源许可协议
  • 【Swift】字符串和字符
  • springboot第83集:理解SaaS多租户应用的架构和设计,设备介入,网关设备,安全,实时实现,序列化...
  • python-自定义排序函数sorted()
  • OpenCV基本图像处理操作(六)——直方图与模版匹配
  • 二叉树路径相关算法题|带权路径长度WPL|最长路径长度|直径长度|到叶节点路径|深度|到某节点的路径非递归(C)
  • 一篇文章了解机器学习(下)
  • linux命令面试题及参考答案
  • 5G NR:TDD和FDD的技术差异
  • 数据结构 ——— 判断一棵树是否是完全二叉树