刷新导航栏背景颜色

时间:2018-03-08 15:24:11

标签: ios swift uinavigationcontroller uinavigationbar

我有一个与视图背景颜色相同的导航栏。 如果用户按下按钮,则视图的颜色会改变,但导航栏的颜色不会改变。 如果我正在尝试手动更改

self.navigationController?.navigationBar.barTintColor = UIColor(red: 104.0/255.0, green: 154.0/255.0, blue: 26.0/255.0, alpha: 1.0)

它会改变导航栏背景颜色,但它与视图的颜色不完全相同,即使我为背景设置了相同的值。

如何将导航栏的颜色设置为与视图的颜色相同?

2 个答案:

答案 0 :(得分:1)

有两种方式:

1)将导航栏设置为非半透明:

navigationController?.navigationBar.barTintColor = UIColor(red: 1.0, green: 0, blue: 0, alpha: 1.0)
navigationController?.navigationBar.isTranslucent = false

2)设置导航栏的背景图片:

navigationController?.navigationBar.setBackgroundImage(UIImage(named: "red"), for: .default)

您还可以使用如下函数提供基于UIColor的生成的UIImage:

func convertUIColorToUIImage(_ color: UIColor, size: CGSize) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}

答案 1 :(得分:1)

导航栏和ViewController之间的区别是因为导航栏是半透明的,系统将为导航栏应用默认的alpha值。

self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.barTintColor = UIColor(red: 104.0/255.0, green: 154.0/255.0, blue: 26.0/255.0, alpha: 1.0)

或手动:

导航栏和ViewController背景颜色的差异为20.这为UINavigationBar提供了内置样式,使其具有“光泽”外观。

所以R = 104 | G = 154 | B = 26将变为R = 84 | G = 134 B | B = 6。

navigationController?.navigationBar.barTintColor = UIColor(red: 84.0/255.0, green: 134.0/255.0, blue: 6.0/255.0, alpha: 1.0)
self.view.backgroundColor = UIColor(red: 104.0/255.0, green: 154.0/255.0, blue: 26.0/255.0, alpha: 26.0)
相关问题