CYLTabBarController: 自定义一个简单的 tabbar

先说结论:

通过对一些第三方库一些调研, 在 github 之上 , 笔者没有找到特别高质量且低耦合的第三方 自定义 tabbar 库, 且通过查看第三方库的源码, 笔者发现了一些之前忽视的自定义 tabbar 的相关参数, 可以更加的去自定义一些UI

而且笔者通过调研一些app (比如微信), 发现这些 app 也在使用原生控件, 所以笔者认为原生控件可以满足大多数的 app 的需求, 所以笔者认为, 在不是必须的情况下, 没有必要一定全部重写 tabbar

那么问题来了, 我们如何很好的自定义原生 tabbar 呢?

目前可以自定义的UI

首先我们要清楚, 系统提供了哪些接口来自定义 tabbar, 我们能做什么

tabbar 高度
tabbar 默认/选中 图片
tabbar 默认/选中 文字以及文字属性
tabbar 默认/选中 文字以及文字属性
tabbar 整体的背景图片/颜色
tabbar 整体的阴影
tabbar 选中时候的背景图片(如果想要纯色, 请设置为纯色图片)
tabbarItem 的一些 button 的宽度
tabbar title/image 的偏移

我们不能做什么

tabbar 上 Button 上的 UI 以及相关动画/布局
tabbar 红点的样式, 但是 iOS 10 添加了一些相关的新接口
tabar 整体的背景
自定义样式的按钮/或者不规则的按钮

但是这上边的事情我们真的就不能解决了吗, 当然不是

对于背景, 虽然系统没有提供接口, 但是 UIView 上的问题往往通过下面三个步骤都能解决
1.遍历子视图
2.插入视图
3.调整视图层级
而红点样式, 同理 我们可以找到 对应的 Button 然后向上面添加 特殊 tag 的 view, 这样就可以自定义样式了, 起码微信就是这么做的.
至于自定义按钮的话, 我会在下面讲解 CYLTabBarController 的时候进行说明

CYLTabBarController

目前发现的 github 上标星最多的 自定义 tabbarViewController 第三方框架

这个库的主要作用是添加一个 PLUS 按键

实现类似如下的效果

优点:

实在 UITabViewController 与 UITabBar 的基础之上进行的再次封装, 低耦合,接入基本上没有什么特别大的成本

缺点:

1 它目前截获了 tabbarController 的 delegate, (可以进行优化)
2 它的 tabbarItem 使用的是 navgationController 的, 没有使用导航控制器的根控制器 (可以进行优化)
3 由于是在原生控件基础之上的封装, 所以对 UI 的可定制和原生相比提升不大
4 tabbarButton 的布局只能是均与分布, 在 iPad 上表现不佳(可以优化)

就我上面说的优缺点, 我来进行一下解释:
首先这个库的自定义按钮所对应的其实是一个操作,而不是对应到相应的控制器, 所以应用场景更适合类似中间提供 分享/发状态/拍照 等功能.
缺点中我在后面添加了很多(可以进行优化)的标识, 有兴趣的同学可以和我讨论一下或者自己去看一下如何优化.

CYLTabBarController 实现

TabbtController

使用自定义的 tabbar, 通过初始化方法 得到 viewControllers 与 configs, 然后逐条设置并且添加到 tabViewController

Tabbar

先注册一个 plus button, 然后遍历 tabbar 的所有子view, 然后把 button 重新布局,
plusbutton 一般高于 tabbar , 使用

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
来判断是否点击了 plus button

总结起来很简单, 就只在上边加一个按钮, 再把其他东西重新布局, 所以说及时看起来不是原生的, 其实我们动动脑子也是可以的

但是每个公司不一样, 交互一不一样, 原生的毕竟有各种限制

那么问题来了, 如果我就是要完全重写 Tabbar, 有哪些要注意的

如果完全重写 TabbarVC 的关键点

  1. 为了实现原生的效果 要监听 viewcontroller 的 tabarItem 的各种参数的变化
  2. 自定义的 tabbar 要自己定制布局规则 (iPad 的上尤为重要)
  3. 为了响应 hidesBottomBarWhenPushed, 需要与 navigationController 配合, 在执行动画的时候改变 Tabar 的层级, 实现类似原生的效果
  4. 如果想完全解耦, 还想迁移完全无成本,可能需要把接口定制为与原生控件相同, 需要研究原生的所有规则

当然, 我上边罗列的点,其实也有问题,就是我仍然想使用系统提供的参数接口, 比如是 controller 的一些类似 tabbarItem 的参数, 因为我个人是不希望因为某一个控件的自定义, 而造成其他所有代码都要为之而发生变化.
但是要说的是, 如果真的有需要, 怎么写都可以,实现了效果才是最重要的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,024评论 4 62
  • 在烟雨濛濛的江南河岸,除却名誉天下的杭州与六朝古都的南京,还有一个大家都甚少提及的城市,扬州。 烟花三月下扬州,从...
    明希玥cici阅读 639评论 0 6
  • 信息对称 互联网的发展,使得信息更加公开化透明化,使得商业信息更加对称,如此也是创业的机遇,可以利用互联网的信息对...
    Hesson阅读 715评论 0 3