自定义 NavigationBar 几乎已经存在 99% app 中,也可以说差不多的 app 或多或少都对原生 NavigationBar 做了一些改造工作。在这篇文章中我将总结我在项目中遇到的需要对 NavigationBar 自定义的一些需求总结,同时也会结合目前市面上使用人数较多的 app 进行参考(copy)。
这是 QQ 中的侧滑返回效果,可以说 QQ 的所有 NavigationBar 都是遵循了苹果的设计规范,都是默认效果,而且这种效果从体验上来讲,也给用户一种非常自然的感受。以上是新浪微博中 NavigationBar 的侧滑返回效果,这个效果也是我之前一直使用的,因为自定义效果非常的好,几乎可以在 NavigationBar 上做任何想做的事情,但也是这段时间才发现,虽然纯自定义 NavigationBar 能够做出一些非常灵活的功能,但是从用户体验上来看,会给人一种两个页面分割开了没有一种联动性的感觉(因为这毕竟还是同一个 NavigationController)。
这是微信的 NavigationBar 侧滑返回效,(记不得是哪个版本才加入的这种过渡效果了)给了我一种非常取巧的感觉,不管是从用户体验还是开发层面上都兼顾到了,而且还会给用户一个虽然这两个页面确实是位于一个 NavigationController 上,但实际上这两个页面确实没有联系性很强的的视觉感受。基本上目前市面上的自定义 NavigationBar 样式就这三种了,就我个人而言,如果我要做的一个从功能上来说比较复杂的,bar 需要承载的内容比较多,甚至加上了渐变、动态 UI 等等需求,我会选择“纯自定义”的方法去做,因为这相当于就是给我们一个 View 自由发挥。如果说要交互占了比较大的一部分,也就是更看重各个组件之间衔接等,其实说白了就是不但想要渐变效果还想要较高的自定义,那我会选择“默认 + 自定义”的方法。最后,如果是时间不够了、做的东西比较简单等,直接用原生的吧,又快又方便,而且用户体验极佳。
接下来将分别实现这三种 NavigationBar 返回效果,后续如果在项目中有遇到更多的自定义需求,也会持续更新。
就像上文所说的,在过去的时间中,我最开始是直接用了 iOS 原生的 navigationBar 侧滑返回效果,刚开始没理解好 navigationBar 中很多内容,直接上手就干,具体细节大家如果有兴趣的话可以看这个 repo