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

时间:2014-12-23 21:45:30

标签: ios xcode user-interface swift

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

如果我在故事板中设置颜色(在Bar Tint部分设置Navigation Bar属性)

所需的颜色是:

  

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相同。

  • 按代码: enter image description here
  • 通过故事板: enter image description here

修改

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

  • 按代码: enter image description here

  • 通过故事板: enter image description here

为什么?

3 个答案:

答案 0 :(得分:12)

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

  1. 在Storyboard中设置的值是 RGB(sRGB IEC61966-2.1)类型,当您按RGB值编码UIColor时,它将返回 RGB(通用RGB)价值观。
  2. 因此,当您从Storyboard更改颜色时,RBG类型的值会有所不同。要在故事板中获得 RGB滑块的精确RGB值更改类型。

    点击 RGB滑块选项正好的“设置”图标。它将显示一个弹出菜单 - 选择 Generic RGB 选项。

    enter image description here

    现在您可以观察RGB值

    的图像
    56 186 145
    

    现在改为

    49 175 126
    

    所以这些是代码的欲望值。

    1. 综述问题:
    2. 在代码中,您传递给出参数的向上舍入值,如下面一行

      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
      

答案 1 :(得分:2)

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

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

但是,默认情况下,Storyboard颜色选择器似乎使用原生值RGB。你需要在两者之间进行转换。您可以通过单击 Colors 选项卡中 RGB Sliders 列表选择器旁边的设置图标,在Storyboard颜色选择器中执行此操作。原始RGB值在 Color LCD 设置下设置,sRGB值当然在 sRGB 下。

enter image description here

执行此操作时,原始RGB空间中的56 186 145似乎在sRGB空间中为73 186 141。所以你的代码必须是:

let backgroundColor = UIColor(red: 0.286, green:0.729, blue:0.553, alpha:1.0)

答案 2 :(得分:1)

当我尝试从故事板/界面构建器(在XCode 6.3.2上)将颜色空间更改为 GenericRGB 时,XCode不会保存更改。因此,如果我从“界面”构建器重新打开颜色,则颜色空间始终为 sRGBIEC61966-2.1。

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

Color Sync screenshot