给导航条设置背景图片就会取消它的半透明效果
UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[self image:[UIImage imageNamed:@"纯白"] withColor:[XNWGlobalColor navigationColor]]
forBarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[navigationBar setShadowImage:[UIImage new]];
}
给Image着色,我这里的导航条颜色是不固定的,所以需要根据不同颜色生成跟导航条相同的颜色,以此来隐藏分割线
//改变图片颜色
- (UIImage *)image:(UIImage *)image withColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
[image drawInRect:rect];
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextFillRect(context, rect);
UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
以上设置背景图片需要注意,如果使用的图片过大就会使得所有非继承UIScrollView的控制器向下偏移一定的位置,建议使用1px的图片进行平铺(没有验证是否可用)
还有一种隐藏导航条与View的分割线(实际就是一个图片),这种方式不会使别的控制器有偏移,并且可以保持导航条的半透明效果,看大家的需求了
if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){
NSArray *list=self.navigationController.navigationBar.subviews;
for (id obj in list) {
if ([obj isKindOfClass:[UIImageView class]]) {
UIImageView *imageView=(UIImageView *)obj;
NSArray *list2=imageView.subviews;
for (id obj2 in list2) {
if ([obj2 isKindOfClass:[UIImageView class]]) {
UIImageView *imageView2=(UIImageView *)obj2;
imageView2.hidden=YES;
}
}
}
}
}
希望对大家有用!!