状态栏和导航栏似乎没有相同的颜色iOS Swift

时间:2017-02-15 14:55:26

标签: swift uinavigationbar uistatusbar

我想将状态栏颜色设置为与导航栏相同的颜色。当我尝试将导航和状态栏设置为相同的颜色时,导航栏总是以比状态栏更浅的颜色显示。

这就是我想要的:

enter image description here

我的结果:

enter image description here

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

有人能给我任何关于如何解决这个问题的建议。

提前致谢!

5 个答案:

答案 0 :(得分:4)

我没有遇到想要的结果:

enter image description here

这是我使用的代码(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

在这种情况下,它们的颜色将相同。