[英]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.