XCode 8 不正确的背景颜色 - 故事板更新的颜色空间
Posted
技术标签:
【中文标题】XCode 8 不正确的背景颜色 - 故事板更新的颜色空间【英文标题】:XCode 8 incorrect background color - Storyboard Updated Color Space 【发布时间】:2016-10-09 01:34:22 【问题描述】:升级到 XCode 8 后,我注意到我的一些视图(在 Interface Builder 中布局)现在颜色不正确。
具体来说,我的登录页面上有两个自定义视图,它们通常具有白色背景。升级到 XCode 8 后,它们的背景颜色清晰了!看起来很糟糕。
我做了一些调查并从 Apple 发现了这个:
Interface Builder 文档中的颜色值在渲染和编译期间正确使用颜色空间。早期版本的 Xcode 错误处理了保存在 ios 和 tvOS 文档中的色彩空间。 Xcode 8 以保留其在设备上的感知外观的方式转换现有颜色,并根据需要更新源文档中的颜色空间或组件值。 (7645087)
果然,当我查看破坏事件的提交的差异时:
这个:
<rect key="frame" x="8" y="8" />
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
被替换为:
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
我能做些什么来解决这个问题?以下是我尝试过的一些事情:
1) 在界面生成器中,选择视图,然后打开背景颜色的调色板。单击齿轮图标,然后选择 SRGB。也尝试了其他配置文件,似乎没有任何效果。
2) 尝试恢复 XIB 文件。不能这样做,因为它是 XCode 8 升级的一部分。在选择所需的 iPhone 尺寸后,当您为视图控制器调用“更新帧”时,颜色配置文件会发生这种变化。
任何人有任何其他建议都会很有帮助!
【问题讨论】:
【参考方案1】:难以置信。
在我的自定义视图(UIView 的子类)中,我有一个“commonInit”方法,它包含通过“init”、“initWithCoder:”或“initWithFrame:”调用的所有常见实例化代码
在那个“commonInit”方法中,我做了一些我可能不应该做的事情:
self.layer.cornerRadius = 0.5 * self.bounds.size.height;
不知何故,这适用于 iOS 9.3 + XCode 7,但 不 IOS10 + XCode 8
为什么它不应该起作用是有道理的。在实例化时,视图尚未布局,因此它的框架可能是 0,0,0,0。
解决方案是将代码移到“layoutSubviews”中。
问题仍然是为什么该行为会导致清晰的背景。可能是因为不支持cornerRadius 0?
【讨论】:
【参考方案2】:我在自定义视图方面遇到了同样的问题(无法设置背景颜色)。通过一些搜索和反复试验,我的问题已经解决。解决问题的技巧是:
当你打开xib时,会出现“选择初始设备视图”的提示,有两个选项;您可以选择“选择设备”。
在右侧边栏中找到“interface builder Document”,并将“open in”重置为 Xcode 7.x。设置完成后会有保存设置的提示;你应该选择“保存并关闭”。
按照这些步骤可能会解决您的问题。
【讨论】:
以上是关于XCode 8 不正确的背景颜色 - 故事板更新的颜色空间的主要内容,如果未能解决你的问题,请参考以下文章