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

77

我在代码中定义了一个颜色:

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

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


使用 colorWithHue 而不是 RGB 网页十六进制值:非常好的选择。 - zaph
3
请尝试记录由IB设置的HSB值,并在不同的情况下提交错误:bugreporter.apple.com。我认为我也遇到了这个问题。 - zaph
当我选择一个UIView的背景颜色并为UITableView设置相同的背景颜色但不同的颜色时,我也遇到了同样的问题。为了实现这一点,我必须更改颜色的alpha值。 - Paresh Navadiya
故事板颜色已记录:H:27.982594 S:0.899257 B:0.953253。我会汇报。 - Nick
6个回答

229

Xcode 8+,iOS 10+

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

图片描述

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


谢谢你提醒我!是否有可能在不运行任何手动脚本的情况下全局应用此更改到每个Interface Builder (.xib 和 .storyboard) 文件中? - Josh Sklar
我认为这篇文章非常好地解释了你应该怎么做:https://lembergsolutions.com/blog/how-get-right-color-ios-detailed-instruction - Warpzit
谢谢!这很有帮助! - Dmytro Yashchenko
非常感谢你,伙计!太他妈的棒了!它起作用了!你救了我的晚上。 - undefined

40
我遇到了同样的问题。我发现在代码中运行时创建的 UIColor 的 RGB 值与 storyboard 中的颜色不匹配。通过将颜色设置为“通用 RGB”(而不是默认的 sRGB)来解决 storyboard 中的问题。下面是 IB 中所说的截图:

我想我之前尝试过那个,但现在在Xcode 6.2中使用通用RGB似乎可以保持正确的值,谢谢。 - Nick
嘿@Nick。我也在使用Xcode 6.2,遇到了你描述的同样问题,即它无法保留你设置的值。你需要稍微调整一下;有些条件会导致它重置(它有点小问题,但我能够解决它们)。 - mattr
如果您使用的是iOS 10 Xcode 8,请查看@Camilo M的答案。 - Le Duc Duy

8

Swift 3

对于我的情况,精确的是Color LCD

enter image description here

希望我能帮到你 :-D


1
哇,他们经常更改配置文件,我可以确认这在XCode 9上可行。 - Boanta Ionut

3
使用代码时,UIColor的init(red:green:blue: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 截图

实际上,这个问题与 iOS 10 没有关系。iOS 10 后,UIColor init 使用的是“扩展 sRGB”而不是 sRGB。只有当我们使用低于 0.0 和高于 1.0 的 r g b 值时,才会出现问题。

iOS 10 UIColor 相关


1

看起来这是一个bug。当在代码中记录IB设置的颜色时,它具有H:27.982594 S:0.899257 B:0.953253的值。

我已向苹果提交了一个bug报告: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]);

0
以下是三行代码实现所需的导航栏背景颜色:
navigationBar.isTranslucent = false
navigationBar.backgroundColor = UIColor.black
navigationBar.barTintColor = UIColor.black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接