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 不正确的背景颜色 - 故事板更新的颜色空间的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 tableview 的故事板背景颜色属性不起作用?

混合objective-c/swift项目中的故事板颜色问题

xcode 8.1故事板仅显示蓝线

如何将 xcode 8 故事板转换为 xcode 9

如何在 swift xcode 故事板中正确使用纵横比?

Xcode 自动布局故事板预览不显示容器视图