ios

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];
}

当然在显示分割线的方法中也可以加入颜色得参数。主要思路是先去清除导航栏分割线,然后再添加新的导航栏分割线。不清除的话分割线会越加越多。最后隐藏的时候会不好弄。

上一篇下一篇

猜你喜欢

热点阅读