刷新导航栏背景颜色
Posted
技术标签:
【中文标题】刷新导航栏背景颜色【英文标题】:Refresh Navigation Bar background color 【发布时间】:2018-03-08 15:24:11 【问题描述】:我有一个与视图背景颜色相同的导航栏。 如果用户按下按钮,视图的颜色会发生变化,但导航栏的颜色不会发生变化。 如果我尝试手动更改它,使用
self.navigationController?.navigationBar.barTintColor = UIColor(red: 104.0/255.0, green: 154.0/255.0, blue: 26.0/255.0, alpha: 1.0)
它确实改变了导航栏的背景颜色,但它与视图的颜色并不完全相同,即使我为背景设置了相同的值。
如何将导航栏的颜色设置为与视图的颜色相同?
【问题讨论】:
【参考方案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)
【讨论】:
如果您需要精确匹配,我强烈建议您不要尝试手动匹配导航栏的颜色。您建议的值与视图的背景颜色完全不同。您将永远无法完全匹配颜色,例如,您永远无法获得完全的红色、绿色或蓝色,因为导航栏总是会将颜色调整为稍微亮一些,并且当用户滚动其下方的内容时,它只会改变导航栏的颜色,因为它是半透明的。 @frin 这只是一个建议。制作半透明是最好的方法。将背景颜色与导航栏颜色匹配的任何其他方式都不会为您提供完全匹配。手动匹配颜色是可选的。【参考方案2】:有两种方式:
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
【讨论】:
以上是关于刷新导航栏背景颜色的主要内容,如果未能解决你的问题,请参考以下文章