Color in storyboard not matching UIColor
IosColorsInterface BuilderUistoryboardUicolorIos Problem Overview
I am defining a color in code as
[UIColor colorWithHue:32.0/360.0 saturation:0.88 brightness:0.97 alpha:1]
If I try to set the same color in storyboard, when running the App it is a slightly different colour to the one defined in code. If I drag the color to the palate then select a different color and select the palate one again, the HSB values are slightly different. It seems it is snapping to a different (RGB?) color in interface builder.
Ios Solutions
Solution 1 - Ios
Xcode 8+, iOS 10+
I recently faced this problem and none of the posted answers did it. It turns out that with the release of iOS 10 SDK, the UIColor
initializer init(red:green:blue:alpha:)
now uses the extended sRGB range, so you have to set accordingly when configuring your color values on the Storyboard.
See Apple's documentation: https://developer.apple.com/reference/uikit/uicolor/1621925-init
Solution 2 - Ios
I had the same issue. I was seeing runtime RGB values of the colors from storyboards not matching UIColors created at runtime in code. I was able to fix this in storyboards by setting the color to be "Generic RGB" (vs the default of sRGB) when configuring it. Here is a screenshot of what I'm talking about in IB:
Solution 3 - Ios
Solution 4 - Ios
With code, UIColor init(red:green:blue:alpha:) method return color object with sRGB color space; With xib / StoryBoard, we need to select "sRGB IEC..." if we want to get same appearance as using code.
Such as:
UIColor.init(red: (20.0/255.0), green: (20.0/255.0), blue: (20.0/255.0), alpha: 1.0)
Actually,this problem has nothing to do with iOS 10. After iOS 10, UIColor init uses "extended sRGB" instead of sRGB. And this will causes problems only when we use r g b values below 0.0 and above 1.0.
Solution 5 - Ios
Seems this is a bug. When logging the color set by IB in code, it has the values H:27.982594 S:0.899257 B:0.953253
I have filed a bug report to Apple: rdar://19744216
Thanks to Zaph
To log:
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]);
Solution 6 - Ios
Following are 3 lines to achieve the desired navigation bar background color:
navigationBar.isTranslucent = false
navigationBar.backgroundColor = UIColor.black
navigationBar.barTintColor = UIColor.black