iOS导航管理器

2019-06-05  本文已影响0人  Style_Tender

最近在写一个iOS的项目,里面的导航栏管理,一开始使用的是WRNavigationBar(这里放上链接:WRNavigationBar)。一开始的时候用的的确很爽,很方便。但随着接入的三方也越来越多。之间的不兼容,也慢慢多了起来。

比如用到的一个相册选择器ZLPhotoBrowser,里面的导航栏会被WRNavigationBar修改,导致按钮看不见,导航栏透明等问题,即使加入到WRNavigationBar的黑名单中,也无济于事。

再比如,当模态一个导航控制器时,会发现不管怎么设置导航栏都是透明的。

这个WRNavigationBar本身没有适配XR(可以通过修改WRNavigationBar的源代码来解决),在了解到作者也不再维护更新了。。。最后决定自己实现一个这样的管理器。

国际惯例,先上地址:https://github.com/Style-Tender/TYNavigationBar

使用方法在github上已经写得比较清楚了(一共也就那么几个方法)

本文主要讲一下实现的步骤:

为了不入侵代码,采用的是建一个UIViewController的Cateory。
1.利用runtime添加了属性:

navigationBarBackgroundColor:导航栏背景颜色
 
statusBarStyle:状态栏Style
 
navigationBarTintColor:导航栏的Tint颜色
 
navigationBarTitleTextColor:导航栏标题的字体颜色
 
navigationBarBackgroundAlpha:导航栏背景透明度
 
navigationBarShadowImageHidden:导航栏横线的隐藏
 
navigationBarHidden:导航栏隐藏

2.在load方法中,交换了

viewWillAppear:

的实现为

ty_viewWillAppear:

再在ty_viewWillAppear:中设置了导航栏的属性,这样就能保证每次进入页面的时候都能变成当前控制器设置的样式

3.为了设置一些全局的样式,又在TYNavigationBarManager中添加了几个类方法,用于设置全局的样式

#pragma mark - 默认导航栏背景颜色
+ (void)ty_setDefaultNavigationBarBackgroundColor:(UIColor *)color;
 
#pragma mark - 默认状态栏Style
+ (void)ty_setDefaultStatusBarStyle:(UIStatusBarStyle) style;
 
#pragma mark - 默认导航栏的Tint颜色
+ (void)ty_setDefaultNavigationBarTintColor:(UIColor *)color;
 
#pragma mark - 默认导航栏标题的字体颜色
+ (void)ty_setDefaultNavigationBarTitleTextColor:(UIColor *)color;
 
#pragma mark - 默认导航栏背景透明度
/**
 默认导航栏背景透明度
 */
+ (void)ty_setDefaultNavigationBarBackgroundAlpha:(CGFloat)alpha;
 
#pragma mark - 默认导航栏横线的隐藏
/**
 默认导航栏横线的隐藏
 */
+ (void)ty_setDefaultNavigationBarShadowImageHidden:(BOOL)hidden;

实现也都是比较简单的,没有什么复杂,高深的东西,只是为了给有需要,又不想自己写的同学直接用一下。觉得有点作用的,还请点个Star。万分感谢

谢谢看完。

上一篇下一篇

猜你喜欢

热点阅读