我想将状态栏颜色设置为与导航栏相同的颜色。当我尝试将导航和状态栏设置为相同的颜色时,导航栏总是以比状态栏更浅的颜色显示。
这就是我想要的:
我的结果:
AppDelegate中的代码:
状态栏:
UIApplication.sharedApplication().statusBarStyle = .Default
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:"))
{
statusBar.backgroundColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0)
statusBar.tintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0)
}
导航栏:
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
UINavigationBar.appearance().backgroundColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .Default
有人能给我任何关于如何解决这个问题的建议。
提前致谢!
答案 0 :(得分:4)
我没有遇到想要的结果:
这是我使用的代码(Swift 3):
let app = UINavigationBar.appearance()
// nav bar color => your color
app.barTintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0)
app.isTranslucent = false
// status bar text => white
app.barStyle = .black
// nav bar elements color => white
app.tintColor = .white
app.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
至于你做什么,很难知道从哪里开始。首先,这条线是完全非法的(并且可能会让你的应用程序被App Store禁止):
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
目前iOS中状态栏的颜色是 clear 。没有必要设置它的颜色,你不应该这样做。如果行为正确,导航栏会向上扩展到状态栏后面,因此它们总是具有相同的颜色,因为您看到的内容始终是相同的界面对象,即导航栏。
至于设置导航栏的颜色,请不要忘记默认情况下它是半透明的。如果不使其不透明,则无法准确设置其颜色。此外,您不应该设置其backgroundColor
。您应该设置其barTintColor
或者给它一个背景图像(这是获得对其颜色的最佳控制的方式)。
简而言之,你所做的一切都是错误的,所以很难对它没有“工作”这一事实表示同情。
答案 1 :(得分:4)
对我来说,关键是改变isTranslucent属性:
navigationBar.isTranslucent = false
navigationBar.barTintColor = PlateColors.mainRed
navigationBar.backgroundColor = PlateColors.mainRed
答案 2 :(得分:1)
要获得所需的结果,请将状态栏样式设置为默认值,并将UINavigationBar.appearance()。barTintColor设置为所需的颜色。
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
UINavigationBar.appearance().barTintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0)
UIApplication.sharedApplication().statusBarStyle = .Default
答案 3 :(得分:0)
基于@matt建议将导航栏扩展到状态栏下方,导航栏必须不透明:
let navigationBar = navigationController?.navigationBar
navigationBar?.isOpaque = true
navigationBar?.setBackgroundImage(UIImage(color: UIColor(white: 0, alpha: 0.5)), for: .default)
navigationBar?.shadowImage = UIImage()
extension UIImage {
convenience init?(color: UIColor) {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
答案 4 :(得分:0)
我遇到了同样的问题,我发现这不是状态栏的问题,而是导航栏的问题。如果将导航栏的背景颜色和简单的UIView设置为相同,则显示的真实颜色将不同。要使导航栏的颜色与另一个视图相同:
错误的代码
navigationBar.backgroundColor = .blue
view.backgroundColor = .blue
权限代码
navigationBar.isTranslucent = false
navigationBar.barTintColor = .blue
view.backgroundColor = .blue
在这种情况下,它们的颜色将相同。