[英]Can't change Constraint IBOutlet that is defined for different size classes in IB
[英]Why is color defined in IB different than one defined in code?
我有一個單視圖應用程序。 我在單個視圖中定義了兩個UIView
實例。 我希望兩者都具有相同的顏色。
對於第一個視圖,我在Interface Builder中定義它並選擇一種顏色。 我想要#999999
(灰色)。 新顏色選擇器可以輸入十六進制顏色值,因此很容易輸入: 999999
。
對於第二個視圖,我通過設置第二個視圖的背景色來定義它。 我使用[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1]
設置了相同的#999999
顏色。
簡單計算: #99 -> 153 -> 153/255 == 0.6.
到目前為止很好。
但是,產生的顏色是不同的。 為什么? 感覺就像xcode中的錯誤。 調試結果顏色后:
IB中定義的顏色: UIDeviceRGBColorSpace 0.529648 0.529632 0.529641 1
代碼中定義的顏色: UIDeviceRGBColorSpace 0.6 0.6 0.6 1
更新:我知道這個問題的“重復”。 他們有一個共同點。 他們正確地發現了問題,但未能解決。 它測試了Panic和Skala的開發人員顏色選擇器。 他們有同樣的問題。 而且,由於受傷,他們提供了十六進制值作為副本顏色。 來賓什么,那里的數字根本不受顏色配置文件的影響。 因此,例如顏色#999
它們為每種顏色分量提供正好0.6
。 不幸的是,如果直接使用顏色,則會附加顏色配置文件,從而導致顏色不同。 獲得精確RBG顏色的唯一方法是使用“安全網頁顏色”,其中所得顏色具有通用RGB顏色配置文件,換句話說,不受影響。 問題是安全的網頁顏色並不包含我們的設計師使用的所有顏色。
這是UIColor上的類別,如果有幫助,可以從十六進制字符串創建UIColor
。
+ (UIColor *)rz_colorFromHex:(uint32_t)hexLiteral
{
uint8_t r = (uint8_t)(hexLiteral >> 16);
uint8_t g = (uint8_t)(hexLiteral >> 8);
uint8_t b = (uint8_t)hexLiteral;
return [self rz_colorFrom8BitRed:r green:g blue:b];
}
+ (UIColor *)rz_colorFromHexString:(NSString *)string
{
NSParameterAssert(string);
if ( string == nil ) {
return nil;
}
unsigned int hexInteger = 0;
NSScanner *scanner = [NSScanner scannerWithString:string];
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"x#"]];
[scanner scanHexInt:&hexInteger];
return [self rz_colorFromHex:hexInteger];
}
至於為什么你的顏色不同。 我將設置一個斷點,並在運行時看到顏色實際上是相同的。 您甚至可以為每種顏色打印出rgb通道,以確保它們沒有不同。
如果它是Xcode錯誤,我會感到驚訝,但是讓我知道當您從調試器檢查顏色時會發生什么。
因此,對此進行更多研究,可以將不同的色彩空間用於RGB。 默認情況下,界面構建器使用的是iOS使用的另一種。 要切換它們,請在使用顏色選擇器時單擊小齒輪,然后將其設置為“通用RGB”。
你可以這樣做
並為另一個視圖編寫代碼:
self.testView.backgroundColor = [UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1.0];
更新:
在Xcode中,單擊顏色選擇器中的顏色空間彈出窗口,然后選擇“通用RGB”,然后輸入Photoshop中的紅色,綠色和藍色值,而不是十六進制值
我們可以找到很多重復項:
XCode Interface Builder中奇怪的顏色?
...
整個問題已由Apple在El Capitan中解決。 因此,如果您在El Capitan上使用xcode 7,則不再是問題。 輸入#hex顏色值不再更改顏色空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.