iOS 自定義導航欄分割線(隱藏顯示,修改顏色)。

項目需求

終于要改到導航欄分割線了,確實,這個東西不好修改。特別是處理上個界面隱藏這個界面顯示的問題。關鍵是分割線的顏色不是系統默認的了。這就要求我們的需要制作一個假的導航欄分割線。首先是將系統的導航欄分割線隱藏(我試過直接修改系統分割線顏色會失效,但是可以隱藏)。讓后在適當的時機加入導航欄分割線。在適當的時機隱藏。下面我將提供本人自己的一套思路。

代碼實現

在有父類控制器的控制器中

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

當然在顯示分割線的方法中也可以加入顏色得參數。主要思路是先去清除導航欄分割線,然后再添加新的導航欄分割線。不清除的話分割線會越加越多。最后隱藏的時候會不好弄。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容