Color in storyboard not matching UIColor
Solution 1
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
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
Swift 3
In my case what was exactly accurate was Color LCD:
I hope I've helped :-D
Solution 4
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
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]);
Nick
Updated on June 15, 2022Comments
-
Nick almost 2 years
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.
-
Nick about 9 yearsI think I had tried that before, but it does seem to keep the correct values with Generic RGB now in Xcode 6.2, thanks
-
mattr about 9 yearshey @Nick. i am also on Xcode 6.2 and had that same problem you describe where it doesnt keep the values you set. You have to play with it a little; there are conditions that cause it to reset (its a little buggy but i was able to work around them).
-
Le Duc Duy over 7 yearsPlease see @Camilo M answer if you're on ios 10 xcode 8
-
Boanta Ionut over 6 yearswow, they change the profiles a lot, I can confirm this works on XCode 9.
-
Josh Sklar almost 6 yearsThanks for the heads up! Is it possible to apply this change globally across every Interface Builder (.xib and .storyboard) file without running some sort of manual script?
-
Warpzit almost 5 yearsI think this gives a very good explanation about what you should do: lembergsolutions.com/blog/…
-
Dmytro Yashchenko about 3 yearsThank you! This helps!