iOS 自定义导航栏分割线(隐藏显示,修改颜色)。
2018-01-19 本文已影响1193人
雨洒潇湘
项目需求
终于要改到导航栏分割线了,确实,这个东西不好修改。特别是处理上个界面隐藏这个界面显示的问题。关键是分割线的颜色不是系统默认的了。这就要求我们的需要制作一个假的导航栏分割线。首先是将系统的导航栏分割线隐藏(我试过直接修改系统分割线颜色会失效,但是可以隐藏)。让后在适当的时机加入导航栏分割线。在适当的时机隐藏。下面我将提供本人自己的一套思路。
代码实现
在有父类控制器的控制器中
- (void)viewDidLoad{//在父类控制器中
[super viewDidLoad];
for (UIView *view in self.navigationController.navigationBar.subviews) {
//去除系统导航栏分割线
if (CGRectGetHeight([view frame]) <= 1) {
view.hidden = YES;
}
}
self.NAVfootView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, SCREEN_WIDTH, 0.5)];
//添加自定义分割线
self.NAVfootView.backgroundColor = [UIColor colorWithHexColorString:@"eeeeee"];
[self.navigationController.navigationBar addSubview:self.NAVfootView];
[self.navigationController.navigationBar bringSubviewToFront:self.NAVfootView];
}
自定义导航栏分割线颜色
- (void)initDHLViewWithColor:(NSString *)color {
self.NAVfootView.backgroundColor = [UIColor colorWithHexColorString:color];
}
在那些设置界面有些人可能和我一下直接用xib拖一下就行了。这时候怎么办呢,可以写一个UITableViewController的Categories
在里面加入两个方法
- (void)removeNAV {//隐藏分割线
for (UIView *view in self.navigationController.navigationBar.subviews) {
if (CGRectGetHeight([view frame]) <= 1) {
view.hidden = YES;
}
}
}
- (void)lookNAV {//显示分割线
for (UIView *view in self.navigationController.navigationBar.subviews) {
if (CGRectGetHeight([view frame]) <= 1) {
view.hidden = YES;
}
}
UIView *NAVfootView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, SCREEN_WIDTH, 0.5)];
NAVfootView.backgroundColor = [UIColor colorWithHexColorString:@"eeeeee"];
[self.navigationController.navigationBar addSubview:NAVfootView];
[self.navigationController.navigationBar bringSubviewToFront:NAVfootView];
}
当然在显示分割线的方法中也可以加入颜色得参数。主要思路是先去清除导航栏分割线,然后再添加新的导航栏分割线。不清除的话分割线会越加越多。最后隐藏的时候会不好弄。