iOS防QQ/美团的导航栏(优雅配置导航栏样式)
在项目中碰到一个很常见的场景:在一个navigationController堆栈中,有的controller需要将navigationBar隐藏,有的controller需要配置不同的背景颜色,有的需要透明,等等。针对这类场景,如果直接使用系统的UINavigationController是不能满足的,因为一个NavigationController只存在一个navigationBar,一个navigationBar在Push/Pop过程中不能展现两种效果,于是,对于显示不同导航栏背景色的controller,一般是将系统navigationBar隐藏,再伪造一个假navigationBar,这样的实现方式在代码中很不优雅,无形中在controller中引入了不关业务的额外代码,不方便维护,同时在UI布局时还需要考虑navigationBar的高度,影响开发效率。
有位小伙伴写了一个控件(QLXNavigationController),使用者可以像使用系统控件一样,同时还可以自由配置每个controller导航栏背景色,巧妙地解决了这个问题。但有点瑕疵的是,新推出一个controller,会额外增加一个controller和navigationController。不过,经过测试,在性能上并无大碍,稍微增加了点内存占用。
由于项目中想实现QQ/美团的导航栏动画效果,因此,我也基于此以及另外一个开源控件,整合了一个较完善(重写转场动画)控件:ConfigurableNaviController,编写过程中填了其中存在的一些坑,iOS朋友可以直接拿来替换掉已有项目中的UINavigationController,基本不会存在大的问题,当然也可以参考修改自己想要的导航栏效果。觉得实用,记得star一个哈~
ConfigurableNaviController:https://github.com/hncoder/ConfigurableNaviController
参考:
QLXNavigationController:https://github.com/QiuLiangXiong/QLXNavigationController
DZXNavigationController:https://github.com/devzahi/DZXNavigationController