导航栏外观barTintColor alpha组件

时间:2015-11-12 17:34:22

标签: ios swift uinavigationbar translucency

我正在尝试为NavigationBar添加一些透明度而没有任何成功。在我的AppDelegate's didFinishLaunchingWithOptions中,我有以下几行代码:

let navigationBarAppearance = UINavigationBar.appearance()
navigationBarAppearance.barTintColor = UIColor.blueColor().colorWithAlphaComponent(0.2)
navigationBarAppearance.translucent = true

但无论alpha组件是什么,透明度都不会改变。我甚至尝试使用颜色UIImage

let colorImage = UIImage.imageFromColor(UIColor.blueColor().colorWithAlphaComponent(0.2), frame: CGRect(x: 0, y: 0, width: 340, height: 64))
navigationBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)

该方法不会改变导航栏的透明度。在我尝试的视图控制器中:

self.navigationController?.navigationBar.tintColor = UIColor.blueColor()
self.navigationController?.navigationBar.alpha = 0.2
self.navigationController?.navigationBar.translucent = true

仍然没有运气。任何人都可以帮我弄清楚如何在导航栏中添加透明度吗?

2 个答案:

答案 0 :(得分:10)

你去男人吧。只需按照以下步骤操作

首先制作一个扩展类。添加一个新的空swift文件,并将其命名为 UIImageExtension 或任何你想要的

在该扩展名中编写以下代码

import Foundation
import UIKit
extension UIImage{
    static func imageFromColor(color: UIColor) -> UIImage {
    let rect = CGRectMake(0, 0, 1, 1)

    // create a 1 by 1 pixel context
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
    color.setFill()
    UIRectFill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image

    }
}

现在转到ViewController类并编写以下代码并使用 alpha 。多数民众赞成。

let image = UIImage.imageFromColor(UIColor(red: 0.071, green: 0.071, blue: 0.922, alpha: 0.2))
self.navigationController?.navigationBar.setBackgroundImage(image, forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.barStyle = .Default
  

适用于Swift 3.0

import Foundation
import Foundation
import UIKit
extension UIImage{
    static func imageFromColor(color: UIColor) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)

        // create a 1 by 1 pixel context
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        color.setFill()
        UIRectFill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!

    }
}

<强> USAGE

let image = UIImage.imageFromColor(color: UIColor(red: 0.071, green: 0.071, blue: 0.922, alpha: 0.2))
self.navigationController?.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
self.navigationController?.navigationBar.barStyle = .default

我也做了一个样本。看一看。示例是Swift 2.x版本的 https://github.com/RajanMaheshwari/TransparentNav
希望它有所帮助!

修改 刚刚将导航栏更改为半透明且有效 enter image description here

截图
enter image description here

答案 1 :(得分:1)

在上一个示例中,您更改了 tintColor ,而不是 barTintColor 。 无论如何,这三行应该有效:

echo ('<option '.($trimmed_satBreakfast[0] == "")  ? : '"selected"' : ''.' value="#">Select One</option>');
echo ('<option '.($trimmed_satBreakfast[0] == "y") ? : '"selected"' : ''.' value="y">Yes</option>');
echo ('<option '.($trimmed_satBreakfast[0] == "n") ? : '"selected"' : ''.' value="n">No</option>');

但请记住,它会更改 整个 导航控制器的栏,因此您必须在从该视图控制器返回时考虑它。