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个了。但目前看来还是没啥问题!!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial(单独导入),或者直接安装 三、对应设置 其他的操作与之前的版本相同…

xiaolin coding 图解网络笔记——基础篇

基础篇 Linux 系统是如何收发网络包的? 网络模型 为了使多种设备能通过网络相互通信,和为了解决不同设备在网络互连中的兼容性问题,国际标准化组织制定了开放式系统互连通信参考模型(Open System Interconnection Reference Mo…

【vba源码】导入excel批注信息

Hi,大家好呀! 又到了一周一分享的时间,上周繁忙的我都没有给大家直播,视频也没更新,那这周大家放心,都会给大家更新,今天我们来讲点啥呢?每周找优质的内容给大家更新是我最最痛苦的…

跨平台WPF框架Avalonia教程 十三

AutoCompleteBox 自动补全输入框 自动补全输入框提供了一个供用户输入的文本框和一个包含可能匹配项的下拉列表。下拉列表会在用户开始输入时显示,并且每输入一个字符,匹配项都会更新。用户可以从下拉列表中选择匹配项。 文本与可能项匹配的方式是可配…

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk)

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk) 1.计算模型介绍 使用GARCH(广义自回归条件异方差)模型计算VaR(风险价值)时,方差法是一个常用的方法。GARCH模型能够捕捉到金融时间序列数据中的波…

力扣 LeetCode 513. 找树左下角的值(Day8:二叉树)

解题思路: 方法一:递归法(方法二更好理解,个人更习惯方法二) 前中后序均可,实际上没有中的处理 中左右,左中右,左右中,实际上都是左在前,所以遇到的第一个…

Nuget For Unity插件介绍

NuGet for Unity:提升 Unity 开发效率的利器 NuGet 是 .NET 开发生态中不可或缺的包管理工具,你可以将其理解为Unity的Assets Store或者UPM,里面有很多库可以帮助我们提高开发效率。当你想使用一个库,恰好这个库没什么依赖(比如newtonjson),那么下载包并找到Dll直接…

“乐鑫组件注册表”简介

当启动一个新的开发项目时,开发者们通常会利用库和驱动程序等现有的代码资源。这种做法不仅节省时间,还简化了项目的维护工作。本文将深入探讨乐鑫组件注册表的概念及其核心理念,旨在指导您高效地使用和贡献组件。 概念解析 ESP-IDF 的架构…

药房革新:Spring Boot中药实验管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

嵌入式 UI 开发的开源项目推荐

嵌入式开发 UI 难吗?你的痛点我懂!作为嵌入式开发者,你是否也有以下困扰?设备资源太少,功能和美观只能二选一?调试效率低,每次调整都要反复烧录和测试?开发周期太长,让你…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中,base64是比较常见的编码方式,在做题的时候发现自己对于base64的编码和解码规则不是很了解,并且恰好碰到了类似的题目,在翻阅了大佬的文章后记录一下,对于base64编码的学习和一个工具 base64编码是…

基于Java Springboot电影播放平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

国标GB28181摄像机接入EasyGBS国标GB28181设备管理软件:GB28181-2022媒体传输协议解析

随着信息技术的飞速发展,视频监控领域正经历从传统安防向智能化、网络化安防的深刻转变。在这一转变过程中,国标GB28181设备管理软件EasyGBS成为了这场技术变革的重要一环。 GB28181-2022媒体传输协议 媒体传输命令包括实时视音频点播、历史视音频回放/…

Redis-monitor安装与配置

0、前言 压测环境因为隔离原因没法直接查看redis日志跟性能指数,只能通过监控工具查看,使用开源redis-montor监控查看 开源地址: GitCode - 全球开发者的开源社区,开源代码托管平台 1、python环境准备(python -v有的忽略&#xff…

windows basic语言学习笔记,批处理命令的简单使用

BAT学习笔记 前言 Windows 命令行中对参数的大小写不敏感,因此 /D 和 /d 的效果完全一致。 1. 代码1:创建目录并复制文件 源代码: echo off REM 创建目标目录,如果不存在 if not exist "C:\h2" (mkdir "C:\h2&q…

5-对象的访问权限

对象的访问权限知识点 对象的分类 在数据库中,数据库的表、索引、视图、缺省值、规则、触发器等等、都可以被称为数据库对象,其中对象主要分为两类 1、模式(schema)对象:模式对象可以理解为一个存储目录、包含视图、索引、数据类型、函数和…

Java Database Connectivity (JDBC + Servlet)

Java Database Connectivity (JDBC)是一个Java API,用于与数据库进行连接和操作。通过JDBC,Java程序可以与各种关系型数据库进行通信,执行SQL查询、更新数据等操作。 一、Java连接数据库两种方式 ​​​​​ ​​ 二、Java中…

[Realtek sdk-3.4.14b] RTL8197FH-VG新增jffs2分区操作说明

sdk说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP issu…

鸿蒙多线程开发——线程间数据通信对象01

1、线程间通信 线程间通信指的是并发多线程间存在的数据交换行为。由于ArkTS语言兼容TS/JS,其运行时的实现与其它所有的JS引擎一样,都是基于Actor内存隔离的并发模型提供并发能力。 对于不同的数据对象,在ArkTS线程间通信的行为是有差异的&…

基于单片机的多功能跑步机控制系统

本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器,由七个电路模块组成,分别是:单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中,单片机模块是整个…