在 Swift xCode 中将 UI 导航栏设置为半透明
Posted
技术标签:
【中文标题】在 Swift xCode 中将 UI 导航栏设置为半透明【英文标题】:Setting UI Navigation Bar to part translucent in Swift xCode 【发布时间】:2015-07-19 22:00:21 【问题描述】:我想让我的导航栏有一点颜色但不是完全半透明。 这是我的代码及其结果:
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)
但如果我将“半透明”设置为 false,即使用以下代码:
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)
我得到这个结果:
如何使条形图的 alpha 值为 0.5 或“部分半透明”?
谢谢您,我们将不胜感激。
【问题讨论】:
试试 UINavigationBar.appearance().tintColor 属性 【参考方案1】:我会为导航栏设置一个半透明的背景图片。
使用此代码:
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
从具有指定 Alpha 的 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
【讨论】:
以上是关于在 Swift xCode 中将 UI 导航栏设置为半透明的主要内容,如果未能解决你的问题,请参考以下文章