故事板中设置的UINavigationBar背景颜色与代码设置的颜色不同
我的应用程序将仅适用于iOS 8
,我正在使用XCode 6.1.1
。
如果我通过故事板设置颜色(在“ Navigation Bar
部分设置“ Bar Tint
属性)
所需的颜色是:
56 186 145
我使用核心编码实用程序来获取我的颜色的浮动值。
按代码:
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
通过故事板设置的颜色与原始RGB相同。
- 按代码:
- 通过故事板:
编辑
我尝试使用let backgroundColor = UIColor(red: 0.255, green: 0.769, blue: 0.635, alpha: 1.0)
和故事板上的RGB: 65 196 162
基于@siejkowski评论,但我得到这些颜色:
-
按代码:
-
通过故事板:
为什么?
你观察到的色差有两个原因。
- Storyboard中设置的值是RGB(sRGB IEC61966-2.1)types,当您通过RGB值对
UIColor
进行编码时,它将返回RGB(通用RGB)值。
所以当你从Storyboard改变颜色时,RBGtypes的值是不同的。 要在故事板中获取RGB滑块的精确RGB值更改types。
点击设置图标,这是完全正确的RGB滑块选项。 它会显示一个popup式菜单 – select通用RGB选项。
现在,您可以在图像中观察RGB的值
56 186 145
现在正在改变
49 175 126
所以这些是代码的愿望值。
- 总结问题:
在代码中,你正在传递给参数的值,如下面的行
UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)
所以它会使颜色代码的每个像素变化很小。 我build议你把这个值除以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.translucent = false
您可以看到不同的颜色,因为它们使用相同的RGB值设置,但使用不同的颜色空间。
UIColor,从代码设置,解释从sRGB空间的值,如下所示: https : //developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGColorSpace/index.html
但是,故事板颜色select器似乎默认使用原生RGB值。 你需要在两者之间进行转换。 您可以通过单击“ 颜色”选项卡中“ RGB滑块”列表选取器旁边的设置图标,在“故事板”颜色拾取器中执行此操作。 原生RGB值设置在彩色LCD设置下,sRGB值当然在sRGB以下 。
当你这样做的时候,似乎原生RGB空间中的56 186 145
是sRGB空间中的73 186 141
。 所以你的代码需要是:
let backgroundColor = UIColor(red: 0.286, green:0.729, blue:0.553, alpha:1.0)
当我尝试从故事板/界面构build器(在XCode 6.3.2上)将颜色空间更改为GenericRGB时 ,XCode不保存更改。 所以如果我重新打开Interface Builder的颜色,颜色空间总是sRGBIEC61966-2.1。
所以我想出了一个不同的解决scheme,可能对别人有用:在Mac OS默认应用程序“ ColorSync Utility”中,我使用了Calculator,并将我的颜色值从GenericRGB转换为sRGBIEC61966-2.1 。 然后,我将转换后的值设置为“接口”构build器,并获得与以编程方式获得的结果相同的结果!