故事板中的颜色与UIColor不匹配

时间:2015-02-06 14:20:39

标签: ios colors interface-builder uistoryboard uicolor

我在代码中定义了一种颜色

[UIColor colorWithHue:32.0/360.0 saturation:0.88 brightness:0.97 alpha:1]

如果我尝试在故事板中设置相同的颜色,则在运行App时,它与代码中定义的颜色略有不同。如果我将颜色拖到上颚,然后选择不同的颜色并再次选择上颚,HSB值略有不同。它似乎是在界面构建器中捕捉到不同的(RGB?)颜色。

6 个答案:

答案 0 :(得分:183)

Xcode 8 +,iOS 10 +

我最近遇到了这个问题,所有发布的答案都没有。事实证明,随着iOS 10 SDK的发布,UIColor初始化程序init(red:green:blue:alpha:)现在使用扩展的sRGB范围,因此您必须在故事板上配置颜色值时进行相应设置。

enter image description here

请参阅Apple的文档:https://developer.apple.com/reference/uikit/uicolor/1621925-init

答案 1 :(得分:36)

我有同样的问题。我看到故事板中颜色的运行时RGB值与代码中运行时创建的UIColors不匹配。通过将颜色设置为" Generic RGB"我能够在故事板中解决这个问题。 (配置默认值为sRGB)。以下是我在IB中谈论的内容的截图:

IB Color config util

答案 2 :(得分:8)

Swift 3

在我的情况下,完全准确的是 彩色LCD

enter image description here

我希望我能帮助:-D

答案 3 :(得分:2)

使用代码,UIColor init(红色:绿色:蓝色:alpha :)方法返回带有sRGB色彩空间的颜色对象; 使用xib / StoryBoard,我们需要选择" sRGB IEC ..."如果我们希望获得与使用代码相同的外观。

如:

UIColor.init(red: (20.0/255.0), green: (20.0/255.0), blue: (20.0/255.0), alpha: 1.0)

xib / StoryBoard screenshot

实际上,这个问题与iOS 10无关。 在iOS 10之后,UIColor init使用"扩展sRGB"而不是sRGB。只有当我们使用低于0.0且高于1.0的r g b值时,这才会引起问题。

iOS 10 UIColor related

答案 4 :(得分:1)

似乎这是一个错误。在代码中记录IB设置的颜色时,它的值为H:27.982594 S:0.899257 B:0.953253

我已向Apple提交了错误报告:rdar:// 19744216

感谢Zaph

要记录:

CGFloat cols[4];
[color getHue:&cols[0] saturation:&cols[1] brightness:&cols[2] alpha:&cols[3]];
NSLog(@"H:%f S:%f B:%f %f",cols[0]*360, cols[1], cols[2], cols[3]);

答案 5 :(得分:0)

以下三行代码可实现所需的导航栏背景色:

navigationBar.isTranslucent = false
navigationBar.backgroundColor = UIColor.black
navigationBar.barTintColor = UIColor.black
相关问题