私はコードで色を定義しています
[UIColor colorWithHue:32.0/360.0 saturation:0.88 brightness:0.97 alpha:1]
ストーリーボードで同じ色を設定しようとすると、アプリを実行すると、コードで定義された色とは少し異なる色になります。色を口蓋にドラッグしてから、別の色を選択し、口蓋の色をもう一度選択すると、HSB値はわずかに異なります。インターフェイスビルダーで異なる(RGB?)色にスナップしているようです。
Xcode 8 +、iOS 10 +
私は最近この問題に直面し、投稿された回答のどれもそれをしませんでした。 iOS 10 SDKのリリースでは、UIColor
初期化子init(red:green:blue:alpha:)
が拡張sRGB範囲を使用するようになったため、ストーリーボードで色の値を構成する際にそれに応じて設定する必要があります。
Appleのドキュメントを参照してください: https://developer.Apple.com/reference/uikit/uicolor/1621925-init
同じ問題がありました。ストーリーボードの色のランタイムRGB値が、実行時にコードで作成されたUIColorと一致していませんでした。これを構成するときに、色を「Generic RGB」(デフォルトのsRGB)に設定することで、ストーリーボードでこれを修正できました。以下は、IBで私が話していることのスクリーンショットです。
コードを使用すると、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)
実際、この問題はiOS 10とは関係ありません。iOS10以降では、UIColor initはsRGBではなく「拡張sRGB」を使用します。そして、これは、0.0未満および1.0を超えるr g b値を使用する場合にのみ問題を引き起こします。
これはバグのようです。コードでIBによって設定された色を記録すると、値はH:27.982594 S:0.899257 B:0.953253になります。
Appleにバグレポートを提出しました: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]);