XCode 8 个不正确的背景颜色 - 故事板更新颜色 Space
XCode 8 incorrect background color - Storyboard Updated Color Space
升级到 XCode 8 后,我注意到我的一些视图(在 Interface Builder 中布局)现在颜色不正确。
具体来说,我的登录页面上有两个自定义视图,它们通常具有白色背景。升级到XCode8后,他们的底色就清晰了!看起来很糟糕。
我做了一些调查并从 Apple 找到了这个:
Color values in Interface Builder documents correctly use color space during rendering and compilation. Earlier versions of Xcode mishandled color spaces saved in iOS and tvOS documents. Xcode 8 converts existing colors in a way that preserves their perceptual appearance on device, and updates either the color space or component values in the source document as appropriate. (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) 在界面生成器中,select 视图,并打开背景颜色的调色板。单击齿轮图标,然后 select SRGB。也尝试了其他配置文件,似乎没有任何效果。
2) 尝试还原 XIB 文件。不能这样做,因为它是 XCode 8 升级的一部分。当您为视图控制器调用 "Update Frames" 时,在 select 设置了您想要的 iPhone 大小后,颜色配置文件就会发生这种变化。
任何人如果有任何其他建议都会很有帮助!
不可思议。
在我的自定义视图(UIView 的子类)中,我有一个 "commonInit" 方法,它包含通过 "init"、"initWithCoder:" 或 [=34 调用的所有常见实例化代码=]
在那个 "commonInit" 方法中,我做了一些我可能不应该做的事情:
self.layer.cornerRadius = 0.5 * self.bounds.size.height;
不知何故,这适用于 iOS 9.3 + XCode 7,但 NOT IOS10 + XCode 8
它不应该起作用的原因是有道理的。在实例化时,视图尚未布局,因此它的框架可能是 {0,0,0,0}。
解决方案是将该代码移至 "layoutSubviews"。
问题仍然是为什么该行为导致背景清晰。可能是因为不支持 cornerRadius 为 0?
我在自定义视图方面遇到了同样的问题(无法设置背景颜色)。通过一些搜索和反复试验,我的问题已经解决。解决问题的提示是:
当你打开xib的时候,会提示"choose an initial device view",有两个选项;你可以选择 "choose Device".
在右侧边栏中找到"interface builder Document"并将"open in"重置为Xcode7.x。设置完成后会有保存设置的通知;你应该选择 "save and close".
按照这些步骤可能会解决您的问题。
升级到 XCode 8 后,我注意到我的一些视图(在 Interface Builder 中布局)现在颜色不正确。
具体来说,我的登录页面上有两个自定义视图,它们通常具有白色背景。升级到XCode8后,他们的底色就清晰了!看起来很糟糕。
我做了一些调查并从 Apple 找到了这个:
Color values in Interface Builder documents correctly use color space during rendering and compilation. Earlier versions of Xcode mishandled color spaces saved in iOS and tvOS documents. Xcode 8 converts existing colors in a way that preserves their perceptual appearance on device, and updates either the color space or component values in the source document as appropriate. (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) 在界面生成器中,select 视图,并打开背景颜色的调色板。单击齿轮图标,然后 select SRGB。也尝试了其他配置文件,似乎没有任何效果。
2) 尝试还原 XIB 文件。不能这样做,因为它是 XCode 8 升级的一部分。当您为视图控制器调用 "Update Frames" 时,在 select 设置了您想要的 iPhone 大小后,颜色配置文件就会发生这种变化。
任何人如果有任何其他建议都会很有帮助!
不可思议。
在我的自定义视图(UIView 的子类)中,我有一个 "commonInit" 方法,它包含通过 "init"、"initWithCoder:" 或 [=34 调用的所有常见实例化代码=]
在那个 "commonInit" 方法中,我做了一些我可能不应该做的事情:
self.layer.cornerRadius = 0.5 * self.bounds.size.height;
不知何故,这适用于 iOS 9.3 + XCode 7,但 NOT IOS10 + XCode 8
它不应该起作用的原因是有道理的。在实例化时,视图尚未布局,因此它的框架可能是 {0,0,0,0}。
解决方案是将该代码移至 "layoutSubviews"。
问题仍然是为什么该行为导致背景清晰。可能是因为不支持 cornerRadius 为 0?
我在自定义视图方面遇到了同样的问题(无法设置背景颜色)。通过一些搜索和反复试验,我的问题已经解决。解决问题的提示是:
当你打开xib的时候,会提示"choose an initial device view",有两个选项;你可以选择 "choose Device".
在右侧边栏中找到"interface builder Document"并将"open in"重置为Xcode7.x。设置完成后会有保存设置的通知;你应该选择 "save and close".
按照这些步骤可能会解决您的问题。