這段時(shí)間的一直在忙于編碼他爸,加上國慶假期等等時(shí)間,又有很長時(shí)間沒有寫過博客了果善。
自從升級了Xcode8诊笤,以及在做iOS10的適配工作中,我發(fā)現(xiàn)在NavigationBar這個(gè)控件中巾陕,有了一個(gè)小小的坑讨跟。
因?yàn)樵趇OS7之后,NavigationBar之后鄙煤,默認(rèn)有一條1px的細(xì)線晾匠,這條細(xì)線怎么去,我在這里就不贅述了梯刚,因?yàn)楣雀枭弦约癝tackOverflow上有太多的方法去除這條細(xì)線凉馆。但是我這次發(fā)現(xiàn),在我升級到iOS10之后亡资,iOS10的設(shè)備中雖然使用了以前的方法澜共,但是還是出現(xiàn)了這個(gè)細(xì)線,但是iOS10以下的設(shè)備這條細(xì)線還是不存在的锥腻。
于是我自己得出了這么個(gè)結(jié)論咳胃,之前去除NavigationBar的這條細(xì)線的方法失效了(這里并不是說所有方法失效,至少我使用的方法是失效的)旷太,那么在發(fā)現(xiàn)自己有這個(gè)問題的時(shí)候,不妨可以來換一種方法實(shí)現(xiàn)隱藏NavigationBar底下的這條細(xì)線销睁。
我把我的新方法供璧,寫成了Category,這里直接貼代碼出來吧冻记。
頭文件中的方法聲明
/**
* NavigationBar底部隱藏1px的線
*/
- (void)lix_hideBottomHairline;
/**
* NavigationBar底部顯示1px的線
*/
- (void)lix_showBottomHairline;
方法的實(shí)現(xiàn)
- (void)lix_hideBottomHairline {
UIImageView *navBarHairlineImageView = [self findHairlineImageViewUnder:self];
navBarHairlineImageView.hidden = YES;
}
- (void)lix_showBottomHairline {
// Show 1px hairline of translucent nav bar
UIImageView *navBarHairlineImageView = [self findHairlineImageViewUnder:self];
navBarHairlineImageView.hidden = NO;
}
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}
簡簡單單睡毒,就可以隨意切換NavigationBar底部線條的隱藏和顯示,這樣的代碼可擴(kuò)展性更好冗栗。
既然講到這里了演顾,那就干脆把NavigationBar如何變成透明的這點(diǎn)也講完好了。
有時(shí)候隅居,我們希望形成一個(gè)透明的NavigationBar钠至,而不是像系統(tǒng)一樣存在一個(gè)毛玻璃的效果挂脑,所以這時(shí)候我們應(yīng)該如下設(shè)置NavigationBar
- (void)lix_makeTransparent {
[self setTranslucent:YES];
[self setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.backgroundColor = [UIColor clearColor];
self.shadowImage = [UIImage new]; // Hides the hairline
[self lix_hideBottomHairline];
}
如果要恢復(fù)默認(rèn)窄刘,則如下設(shè)置
- (void)lix_makeDefault {
[self setTranslucent:YES];
[self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
self.backgroundColor = nil;
self.shadowImage = nil; // Hides the hairline
[self lix_showBottomHairline];
}
這里就組成了整個(gè)NavigationBar的category,希望大家能在自己的項(xiàng)目中靈活運(yùn)用挺益。