从故事板设置的UINavigationBar背景颜色与代码设置的颜色不同

Dan*_*ico 6 user-interface xcode ios swift

我的应用程序仅适用于iOS 8我和我正在使用XCode 6.1.1.

如果我通过故事板设置颜色(Bar TintNavigation Bar部分设置属性)

所需的颜色是:

56 186 145

我使用Core编码实用程序来获取我的颜色的浮动值.

按代码:

let backgroundColor = UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)
self.navigationController!.navigationBar.barTintColor = backgroundColor
self.navigationController!.navigationBar.translucent = false
Run Code Online (Sandbox Code Playgroud)

通过故事板设置的颜色与原始RGB相同.

  • 按代码: 在此输入图像描述
  • 通过故事板: 在此输入图像描述

编辑

我尝试使用let backgroundColor = UIColor(red: 0.255, green: 0.769, blue: 0.635, alpha: 1.0)和故事板中的rgb:65 196 162基于@siejkowski评论,但我得到这些颜色:

  • 按代码: 在此输入图像描述

  • 通过故事板: 在此输入图像描述

为什么?

Kam*_*pai 12

您观察到的颜色差异有两个原因.

  1. Storyboard中设置的值是RGB(sRGB IEC61966-2.1)类型,当您UIColor按RGB值编码时,它将返回RGB(通用RGB)值.

因此,当您从Storyboard更改颜色时,RBG类型的值会有所不同.在Storyboard中获取RGB滑块的精确RGB值更改类型.

单击"设置"图标,该图标与RGB滑块选项完全相同.它将显示一个弹出菜单 - 选择Generic RGB选项.

在此输入图像描述

现在,您可以观察RGB值的图像

56 186 145
Run Code Online (Sandbox Code Playgroud)

现在改为

49 175 126
Run Code Online (Sandbox Code Playgroud)

所以这些是编码的欲望值.

  1. 综述问题:

在代码中,您传递给出参数的向上舍入值,如下面一行

UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)

因此,它会对颜色代码的每个像素进行一次小的更改.我建议你将这个值除以255并保留编译器的向上计算.这将为您提供所需的颜色准确性.

所以现在对于新值,更新代码将是:

let backgroundColor = UIColor(red: 49.0/255.0, green: 175.0/255.0, blue: 126.0/255.0, alpha: 1.0)
self.navigationController!.navigationBar.barTintColor = backgroundColor
self.navigationController!.navigationBar.isTranslucent = false
Run Code Online (Sandbox Code Playgroud)