2015-07-19 57 views
4

我想使导航栏具有淡淡的颜色,但不完全透亮。 下面是代码我已经和他们的结果:将UI导航栏设置为在Swift中部分半透明xCode

 UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
    UINavigationBar.appearance().shadowImage = UIImage() 
    UINavigationBar.appearance().translucent = true 
    UINavigationBar.appearance().barTintColor = UIColor(red: 0, green: 107/255, blue: 178/255, alpha: 0.5) 

all translucent

但是,如果我把“半透明”为假,即使用此代码:

 UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
    UINavigationBar.appearance().shadowImage = UIImage() 
    UINavigationBar.appearance().translucent = false 
    UINavigationBar.appearance().barTintColor = UIColor(red: 0, green: 107/255, blue: 178/255, alpha: 0.5) 

我得到这样的结果: second result

如何让酒吧的alpha值为0.5或“部分半透明”?

谢谢,任何帮助将不胜感激。

+0

尝试UINavigatio nBar.appearance()。tintColor属性 –

回答

0

我会为导航栏设置一个半透明的背景图像。

使用此代码:

UINavigationBar.appearance().setBackgroundImage(UIColor.green.toImage()?.imageWithAlpha(alpha: 0.5), for: .default) 

两个分机使用:

创建一个从的UIColor一个的UIImage:

extension UIColor { 
     func toImage() -> UIImage? { 
      return toImageWithSize(size: CGSize(width: 1, height: 1)) 
     } 
     func toImageWithSize(size: CGSize) -> UIImage? { 
      UIGraphicsBeginImageContext(size) 

       if let ctx = UIGraphicsGetCurrentContext() { 
        let rectangle = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
        ctx.setFillColor(self.cgColor) 
        ctx.addRect(rectangle) 
        ctx.drawPath(using: .fill) 
        let colorImage = UIGraphicsGetImageFromCurrentImageContext() 
        UIGraphicsEndImageContext() 
        return colorImage 
       } else { 
        return nil 
       } 
      } 
     } 

创建从一个指定的阿尔法的UIImage的一个新的UIImage:

extension UIImage { 
    func imageWithAlpha(alpha: CGFloat) -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(size, false, scale) 
     draw(at: CGPoint.zero, blendMode: .normal, alpha: alpha) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return newImage 
    } 
}