升级到XCode 8之后,我注意到我的一些视图(在Interface Builder中布局)现在有不正确的颜色。
具体来说,我的登录页面上有两个自定义视图,通常具有白色背景。升级到XCode 8后,它们的背景颜色很清晰!看起来很可怕。
我做了一些调查,并从Apple发现了这个:
Interface Builder文档中的颜色值在渲染和编译期间正确使用颜色空间。早期版本的Xcode错误处理了iOS和tvOS文档中保存的颜色空间。 Xcode 8以保留其在设备上的感知外观的方式转换现有颜色,并根据需要更新源文档中的颜色空间或组件值。 (7645087)
当然,当我查看破坏事物的提交的差异时:
此:
<rect key="frame" x="8" y="8" width="88" height="48"/>
<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升级的一部分。当您调用&#34;更新帧&#34;时,会发生对颜色配置文件的更改。对于视图控制器,选择所需的iPhone大小后。
任何人都有任何其他建议会非常有帮助!
答案 0 :(得分:1)
难以置信。
在我的自定义视图(UIView的子类)中,我有一个&#34; commonInit&#34;方法,它包含所有常见的实例化代码,名为via&#34; init&#34;,&#34; initWithCoder:&#34;或&#34; initWithFrame:&#34;
在那个&#34; commonInit&#34;方法,我正在做一些我可能不应该做的事情:
self.layer.cornerRadius = 0.5 * self.bounds.size.height;
不知何故,这适用于iOS 9.3 + XCode 7,但 NOT IOS10 + XCode 8
为什么不应该工作是有道理的。在实例化时,视图尚未布局,因此它的框架可能是{0,0,0,0}。
解决方案是将该代码移动到&#34; layoutSubviews&#34;。
问题仍然是为什么这种行为导致了明确的背景。可能是因为不支持cornerRadius为0?
答案 1 :(得分:1)
我在自定义视图方面遇到了同样的问题(无法设置背景颜色)。经过一些搜索和反复试验,我的问题已得到解决。解决问题的提示是:
当您打开xib时,会显示“选择初始设备视图”的通知,并且会有两个选项;您可以选择“选择设备”。
在右侧边栏中找出“界面构建器文档”,并将“打开”重置为Xcode 7.x.设置完成后会有通知保存您的设置;你应该选择“保存并关闭”。
执行这些步骤可能会解决您的问题。