UINavigationBar透明或纯色效果

需求一:导航栏透明

  • 透明
    • 将导航栏及线条的背景图片设置为UIImage
  • 还原系统默认
    • 将导航栏及线条的背景图片设置为nil

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

你可能感兴趣的:(UINavigationBar透明或纯色效果)