需求一:导航栏透明
1 设置透明, 在viewWillAppear
方法中设置
-(void)viewWillAppear:(BOOL)animated{
//设置导航栏 透明效果
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
// 线条背景透明
self.navigationController.navigationBar.shadowImage = [UIImage new];
}
2 还原系统默认, 在视图将要消失的时候viewWillDisappear
方法中设置
-(void)viewWillDisappear:(BOOL)animated{
// 导航栏背景还原默认
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
// 导航栏线条还原默认
self.navigationController.navigationBar.shadowImage = nil;
}
需求二:导航栏背景需要有纯颜色,但是要隐藏下面的线条
- 如果设置
self.navigationController.navigationBar.shadowImage = [UIImage new]
是不起作用的,需要配合设置self.navigationController.navigationBar.backgroundImage = [UIImage new]
使用,但是这样设置只有就会有半透明效果,颜色不纯
- 解决方案:设置导航栏背景图片为一个纯色的图片,然后配合设置隐藏线条即可
- 得到一个纯色的图片两种方式
- 直接一个纯色图片
- 根据代码直接描绘出一张图片, 更加方面,可利用行强(可写在
UIImage
的分类中利用)
+(UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); //宽高 1.0只要有值就够了
UIGraphicsBeginImageContext(rect.size); //在这个范围内开启一段上下文
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);//在这段上下文中获取到颜色UIColor
CGContextFillRect(context, rect);//用这个颜色填充这个上下文
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();//从这段上下文中获取Image属性,,,结束
UIGraphicsEndImageContext();
return image;
}