ESTabBarController
为什么要使用?
在开发工作中,我们可能会遇到需要自定义UITabBar的情况。例如:改变文字样式、添加一些动画效果、设置一个比默认更大的样式等等,以上需求如果只通过UITabBarItem往往很难实现。
有了ESTabBarController,你可以轻松地实现这些!
- | 功能 | 说明 |
---|---|---|
1 | 支持默认样式 | 如果直接使用ESTabBarController进行初始化,你会得到与UITabBarController完全相同的仿系统样式UITabBarController样式:![]() ![]() |
2 | 支持带有"More"的默认样式 | 使用ESTabBarController进行初始化,若item大于最大显示数量则显示"More",样式与UITabBarController一致带有"More"的UITabBarController样式:![]() ![]() |
3 | 支持UITabBarItem和ESTabBarItem混合 | 可以任意设置tabbar的items,支持即包含UITabBarItem,同时也包含ESTabBarItemESTabBar和UITabBar混合样式:![]() ![]() |
4 | 支持UIKit属性 | 支持UITabBarController、UITabBar和UITabBarItem的大部分API属性,使原有代码无需任何修改即可无缝迁移到ESTabBarController支持UITabBarController的selectedIndex 属性的实现:![]() |
5 | 支持与UINavigationController任意嵌套 | 通常在使用UITabBarController 过程中,会存在两种比较常见的层级处理方式:第一种:├── UITabBarController└──── UINavigationController└────── UIViewController└──────── SubviewControllers第二种:├── UINavigationController└──── UITabBarController└────── UIViewController└──────── SubviewControllers第一种情况在push子视图的时候需要设置 hidesBottomBarWhenPushed = true , 第二种则不需要。在ESTabBarController中,通过添加Container视图到UITabBar的方式来兼容这两种层级处理方式。 |
6 | 支持自定义 | 使用ESTabBarController可以实现:1. 自定义选中颜色和样式![]() ![]() ![]() ![]() ![]() |
7 | 支持自定义按钮大小支持自定义点击事件 | ESTabBarController支持自定义按钮的大小,你可以轻松定制不规则大小的tab按钮。当按钮frame大于TabBar时,通过HitTest方法使其超出TabBar区域点击仍然有效。另外,ESTabBarController能够自定义点击事件,并通过一个block回调给上层处理。中间带有较大按钮样式:![]() ![]() ![]() |
8 | 支持默认通知样式 | 如果直接使用ESTabBarController进行初始化,你会得到与UITabBarController完全相同的仿系统通知样式UITabBarController样式:![]() ![]() |
9 | 支持自定义通知样式 | 使用ESTabBarController可以实现:1. 自定义提醒动画![]() ![]() ![]() |
10 | 支持Lottie | 通过自定义ContentView,能够添加Lottie的LAAnimationView到Item![]() |
支持环境
- Xcode 8 or later
- iOS 8.0 or later
- ARC
- Swift 3 or later
Demo
下载后运行ESTabBarControllerExample工程,你可以看到一些使用ESTabBarController实现的自定义TabBar的更多例子。
如何安装
CocoaPods
pod "ESTabBarController-swift"
Carthage
github "eggswift/ESTabBarController"
手动安装
git clone https://github.com/eggswift/ESTabBarController.git
open ESTabBarController
未完成的事
- Containers的布局方式目前是纯代码布局,使用Autolayout应该会更好。
- 当存在"More"时,若进行Edit会出现问题。
- UITabBarItem的部分属性还没有桥接到ESTabBarItem。
- ESTabBarItemMoreContentView中的"More"图片目前还未设置到framework中,计划将它转化为创建CGBitmap的代码。
感谢:
- animated-tab-bar by http://ramotion.com
- Example中部分图片资源来自 http://www.iconfont.cn
关于
ESTabBarController是由lihao开发和维护。如果你在使用过程中遇到什么疑问或任何问题,欢迎提交 issue 随时交流。
如果你想为ESTabBarController输出代码,请提交 Pull Request,我会尽可能快的去处理。
相关文章:

iPhone App开发导航条(Navigation Bar)素材PSD下载
不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条(Navigation Bar)。于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素材PSD文件,并附有下载链接供需要在自己的iPhone App应用开发中需要使用…

点歌服务器工作原理,KTV点歌系统方案概述
《KTV点歌系统方案概述》由会员分享,可在线阅读,更多相关《KTV点歌系统方案概述(7页珍藏版)》请在人人文库网上搜索。1、一)目前点歌系统的主流方式目前,可以实现的KTV系统的点歌方式很多,但是可以主要归类为以下两大方式…
Xcode快捷键及代码块
2017-02-16 吴白 CocoaChina手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人,他们不拘于现状,不固步自封,他们喜欢新奇的事,他们把自己发挥到极致。 指法攻略 放下您钟爱的鼠标吧&#…

使用logrotate管理nginx日志文件
本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘。这样会很危险,因此日志管理是系统管理员日常工作之一。我们可以使用"logrotate"来管理linux日志文件&am…

c 异步中断服务器连接,异步连接和断开与epoll(Linux)
我有一个“完整”的答案在这里以防别人正在寻找这样的:#include #include ........int retVal -1;socklen_t retValLen sizeof (retVal);int status connect(socketFD, ...);if (status 0){// OK -- socket is ready for IO}else if (errno EINPROGRESS){struc…

java获取真实ip
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软…
卡片式设计的最佳实践分享
2017-02-17 三达不留点gpj CocoaChina卡片本质上是一个简单的信息容器,信息量有限,但设计干净整洁。现如今,在保证界面具有优秀可用性的同时,卡片式的设计甚至成为了平衡界面美学的默认做法。作为最初由Pinterest和Facebook这样的…

Arduino 各种模块篇 光敏感应器 简易光敏
这一款是非常简单的光敏感应器 简单到,只对一定光强度有信号感应,输出TTL电平。 此款也是用电位器来调节的。 都是这么简单。 过段时间我为大家奉上数字版的光敏传感器。 ————————————————————————分割线———————————…

vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Adodc DataGrid 控件直接连接 Excel 表格, 把 Excel 表格当成数据库。 在窗体中画出 Adodc1 和 DataGrid1 两个控件, 不做任何属性设置,只管大小和位置。 ------------------------------…

iOS动画进阶 - 手摸手教你写ShineButton动画
移动端访问不佳,请访问我的个人博客 前段时间在github上看见一个非常nice的动画效果,可惜是安卓的,想着用Swift写一个iOS版的,下下来源代码研究了一下,下面是我写代码的心路历程 先上图和demo的地址 分析动画过程 刚开…

redis自动过期
我当时设置如登陆自动过期的时间。自己找的做了下。 设置自动过期时间。 public static PooledRedisClientManager poolreds; static RedisPool() { try { poolreds new PooledRedisClientManager(10, new string[] { “101210.212.:1213” }); } catch (Exception…

Java中使用LUA脚本语言
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。简单介绍可详…

电脑显示服务器地址无法ping通,网关无法Ping通故障及解决方法
很多网络故障是常见问题,一般的三板斧方法就能解决问题,但有些故障容易让我们多走弯路,我们不妨拓宽故障排查范围,换换思路。在与网络亲密接触的过程中,我们或多或少地会遇到一些网络故障,对于许多网络故障…
VVeboTableView 源码解析
原文链接:http://www.jianshu.com/p/78027a3a2c41最近在看一些 iOS 性能优化的文章,我找到了 VVeboTableView 这个框架。严格来说这个不属于框架,而是作者用自己的方式优化 UITableView 的一个实践。 VVeboTableView 展示了各种类型的 cell&a…

人工智能第二次作业
2.9设有如下语句,请用相应的谓词公式分别把他们表示出来 (1) 有的人喜欢梅花,有的人喜欢菊花,有的人既喜欢梅花又喜欢菊花 。 解: P(x):x是人 L(x,y):x喜欢y 其中,y的个体域是{梅花,…

Perl 校验命中的脚本
这个脚本无比的重要,虽然代码简单,但是在判断是否准确上,有着很重要的地位。 通过icmp和解析,它有一定意义所在。 mark!.. #!/usr/bin/perl use Net::Ping; sub icmp_domain{$ktrue;local($host)shift;$pNet::Ping->new("…

从基于网络的安装服务器安装操作系统,PXE 概述 - Sun Fire X4800 服务器安装指南(适用于 Linux 操作系统)...
PXE 概述使用 Linux 预引导执行环境 (preboot execution environment, PXE) 可从网络接口而不是本地存储引导服务器。对于 OS 安装,从基于 PXE 的OS 分发映像引导目标服务器就像从 DVD 引导一样,不同之处在于介质位于网络中。要使用 PXE,您需…

下载最新Android代码的方法
之前我是去Android官方网站下载最新Android代码,但是这种方法需要翻墙,而且有时候翻墙又不太方便,今天我发现一个不错的网站,是清华大学搞的,跟Android官方的代码基本保持同步,而且下载方法跟Android官方的…

socket编程缓冲区大小对send()的影响
1. 概述 Socket编程中,使用send()传送数据时,返回结果受到以下几个因素的影响: • Blocking模式或non-blocking模式 • 发送缓冲区的大小 • 接收窗口大小 本文档介绍通过实验的方式,得出(收发)缓冲区大…

不用任何第三方,写一个RTMP直播推流器
2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮。然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知识。目前大部分直播采用的都是RTMP协…

手机连接服务器数据库文件,手机连接服务器数据库文件夹
手机连接服务器数据库文件夹 内容精选换一换GaussDB(DWS)支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息:导出数据库全量信息,包含数据和所有对象定义。使用导出的全量信息可以创…
开源一个上架 App Store 的相机 App
原创 2017-02-21 伯乐专栏/陈浩 iOS大全(点击上方公众号,可快速关注) 来源:伯乐在线 - Hawk0620 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 Osho 相机是我独立开发上架的…

WIN7下,联想A30T通过USB连接上网
1.手机连接3G信号 2.手机上在设置里 "设置" |"应用程序" |"USB模式" |勾选"网卡模式" 3.连接上Win7,会出现驱动安装程序,手动安装这里的驱动.(驱动在百度网盘:) 4.在设备管理,网络适配器里查看驱动是否安装成…

在bootstrap ace样式框架上修改的后台管理型模板(Tab页后台管理模板)
后台管理模板开始用frameset布局,但是有时候会遮挡比如上面导航或者左边导航的二级三级弹出菜单,因为宽度被限制了,所以有时候就用easyui或者ext的,但是样式不好看,然后看到了bootstrap ace的后台管理模板,…

文件服务器的内存要多少,文件服务器内存要多大
文件服务器内存要多大 内容精选换一换Windows场景中,当把源端服务器迁移到华为云后,目的端服务器C盘的已用空间比对应源端服务器C盘的已用空间大至少1GB,而不是与源端服务器C盘的已用空间一致,这正常吗?正常现象。您可…

好玩的 RAC
UIControl 监听 control 点击 从此告别 addTarget 和 btnClick 1234[[self.loginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *btn) {// btn, 即 self.loginBtn// 这里执行点击之后的操作}];UITextField 监听 textField 的 text 改…

机器学习简单代码示例
机器学习简单代码示例 //在gcc-4.7.2下编译通过。 //命令行:g -Wall -ansi -O2 test.cpp -o test #include <iostream> using namespace std; void input(int &oper,const bool meth) {//meth为true则只判断1,为false则判断1或0while(true){ci…

【2007-5】【素数算式】
Description 在下面的算式中每个“#”都表示一个素数数字。##* #————###请编写程序确定这些数字,输出所有的解。Input Output 依次打印输出每一种解,每行表示一种解,格式为:##*# ###。Sample Input Sample Output HINT Sou…
ubuntu服务器版编辑文件,Ubuntu 服务器版 18.04.4 固定 IP 设置
1、输入命令 su 以root用户权限操作2、找到Ubuntu网络配置文件vim /etc/netplan/50-cloud-init.yaml3、输入 i 让文件变成可编辑状态4、修改内容dhcp4: nodhcp4: noaddresses: [192.168.3.50/24]gateway4: 192.168.3.1nameservers:addresses: [8.8.8.8, 8.8.4.4]如图ÿ…

RACCommand 粗解
前言 学习 RAC 的过程中,RACCommand 是我一直很迷惑的点,感觉一直抓不到它的要点,不明白为何要这样使用。曾经想过用别的方法来替代,只要能找到替代的方法,暂时就没必要死磕,结果发现避免不了,那…