【问题标题】:UINavigationBar background color setted from storyboard differ from the color setted by code从情节提要设置的 UINavigationBar 背景颜色与代码设置的颜色不同
【发布时间】:2015-02-22 01:47:00
【问题描述】:

我的应用仅适用于iOS 8,我正在使用XCode 6.1.1

如果我通过情节提要设置颜色(在Navigation Bar 部分设置Bar Tint 属性)

想要的颜色是:

56 186 145

我使用Core coding utilities 来获取我的颜色的浮动值。

按代码:

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 评论,但我得到了这些颜色:

  • 通过代码:

  • 按故事板:

为什么?

【问题讨论】:

  • 你在哪里设置这个? viewDidLoad()?
  • 是的,我在 viewDidLoad 中运行它
  • 您能否提供显示颜色差异的图像?
  • 我刚刚用图片更新了问题@siejkowski

标签: ios xcode user-interface swift


【解决方案1】:

您在此处观察到的颜色差异有两个原因。

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

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

点击RGB Sliders选项正对的设置图标。它将显示一个弹出菜单 - 选择 Generic RGB 选项。

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

56 186 145

现在改为

49 175 126

所以这些是编码的期望值。

  1. 综述问题:

在代码中,您正在传递参数的向上取整值,如下行所示

UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)

因此它会对颜色代码的每个像素进行微小的更改。我建议您将这些值除以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

【讨论】:

  • 我从我的设计师 (13/89/165) 那里收到了一个 RGB 颜色代码,它是通用 RBG 格式,所以当我在更改为通用 RGB 后从情节提要设置它时,它可以工作。但是,当我尝试以编程方式设置颜色时,结果却是不同的颜色。有什么解决办法吗?
  • 你在设备中检查过这个颜色吗?你在用模拟器吗?
  • 是的,我正在使用模拟器。
  • 请在设备中检查一次,可能与设备不同。有时机器的颜色校准是不同的
【解决方案2】:

您会看到颜色的差异,因为它们使用相同的 RGB 值设置,但在不同的颜色空间中。

UIColor,当从代码设置时,将值解释为来自 sRGB 空间,如下所示:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGColorSpace/index.html

不过,Storyboard 颜色选择器似乎默认使用原生值 RGB。您需要在两者之间进行转换。您可以通过单击 颜色 选项卡中 RGB 滑块 列表选择器旁边的设置图标在 Storyboard 颜色选择器中执行此操作。当然,原生 RGB 值在 Color 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)

【讨论】:

  • 我试过 man 但仍然与故事板不同,我更新了答案,检查底部。
  • 你知道这些空间的在线转换器吗?
  • 我错了。 RGB 值在 Color LCD 设置下,所以我把它们转换错了。我已经更新了答案。我必须承认,这只是一种痛苦。我不知道任何在线转换器,但每个图形程序(Photoshop、GIMP 等)都可以进行这样的转换。
【解决方案3】:

当我尝试从情节提要/界面生成器(在 XCode 6.3.2 上)将色彩空间更改为 GenericRGB 时,XCode 不会保存更改。因此,如果我从 Interface builder 重新打开颜色,颜色空间始终是 sRGBIEC61966-2.1。

所以我想出了一个可能对其他人有用的不同解决方案: 通过 Mac OS 默认应用“ColorSync Utility”,我使用计算器并将我的颜色值从 GenericRGB 转换为 sRGBIEC61966-2.1。然后我将翻译后的值设置到 Interface builder 中,得到的结果与以编程方式获得的结果相同!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多