导航(和状态)栏颜色与编程不同(alpha 自动设置为 0.85)

Posted

技术标签:

【中文标题】导航(和状态)栏颜色与编程不同(alpha 自动设置为 0.85)【英文标题】:Navigation (and status) bar colors different than programmed (alpha automatically set to 0.85) 【发布时间】:2019-01-31 12:51:34 【问题描述】:

目标

我正在尝试将导航栏设置为灰色(RGB 33、33、33)。问题是,当我使用颜色时,我总是得到更浅的颜色:

UIColor(red: 33/256, green: 33/256, blue: 33/256, alpha: 1)

问题

所以我必须将颜色变暗到 RGB 8,8,8 才能正常工作(使用数字色度计验证:获得我想要的 (33,33,33) 灰色)。

代码

我用来执行此操作的代码复制如下:

    //  NAV BAR
    let navigationBarAppearace =  UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.white
    navigationBarAppearace.barTintColor = UIColor(red: 0.03, green: 0.03, blue:0.03, alpha: 1)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    
    //  STATUS BAR APPEARANCE
    UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

我发现了什么

我使用 Xcode 调试视图层次结构进行了调查,右键单击导航栏并按“打印描述”

得到这个:

<_UIVisualEffectSubview: 0x15422d1c0; frame = (0 0; 375 64); alpha = 0.85; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x1d4224c60>>

意味着 alpha 已经设置为 0.85(尽管我从未明确将其设置为该值),无论是在 Interface builder 中还是在代码中的任何位置。

如果我想用与导航栏相同的颜色为任何其他视图着色,我使用:

UIColor(red: 0.03, green: 0.03, blue: 0.03, alpha: 0.85) 相当于 UIColor(red: 8/256, green: 8/256, blue: 8/256, alpha: 0.85)

(相同的 RGB,alpha 为 0.85)

问题

如何删除导航栏上的 0.85 alpha 以在整个应用程序中使用相同的颜色值?

【问题讨论】:

您确定UINavigationBars isTranslucent 属性设置为false?默认为true 谢谢!是的,它做到了。对于未来的读者,这在我的代码中转换为navigationBarAppearace.isTranslucent = false UINavigationBar.appearance().isTranslucent = false 如果您使用的是Appearance Proxy 【参考方案1】:

只要写下面的代码

navigationController.navigationBar.isTranslucent = false

【讨论】:

谢谢!是的,它做到了。对于未来的读者,这在我的代码中转换为navigationBarAppearace.isTranslucent = false

以上是关于导航(和状态)栏颜色与编程不同(alpha 自动设置为 0.85)的主要内容,如果未能解决你的问题,请参考以下文章

iOS13状态栏背景颜色与大文本模式下的导航栏不同

视图更改时反应导航和状态栏颜色闪烁

微信顶部导航栏字体颜色

ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

状态栏和导航栏的颜色不同,但实际上它们应该相同

如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi