最近在写一个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。万分感谢
谢谢看完。
网友评论