項目需求
終于要改到導航欄分割線了,確實,這個東西不好修改。特別是處理上個界面隱藏這個界面顯示的問題。關鍵是分割線的顏色不是系統默認的了。這就要求我們的需要制作一個假的導航欄分割線。首先是將系統的導航欄分割線隱藏(我試過直接修改系統分割線顏色會失效,但是可以隱藏)。讓后在適當的時機加入導航欄分割線。在適當的時機隱藏。下面我將提供本人自己的一套思路。
代碼實現
在有父類控制器的控制器中
- (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];
}
當然在顯示分割線的方法中也可以加入顏色得參數。主要思路是先去清除導航欄分割線,然后再添加新的導航欄分割線。不清除的話分割線會越加越多。最后隱藏的時候會不好弄。