我遇到了XCode的一个非常具体的问题。
我的XCode项目中有两个目标,目标A 和目标B 。
它们都有一个名为Colors.xcassets的单独资产文件夹,其颜色为“主要” 。 目标A中的颜色”主要”为红色,目标B中的颜色为蓝色。
两个目标都有带有标准UI元素的情节提要,颜色为“主要”。生成并运行目标会使界面显示目标的正确“主”颜色。
两个目标都为自定义UIButton
分配了相同的 IBDesignable 类,该自定义UIImage
通过创建private func refreshBackgroundWith(color: UIColor) {
let image = createImageFrom(color: color)
setBackgroundImage(image, for: UIControl.State.normal)
clipsToBounds = true
}
作为背景来显示颜色,从而可以对其进行四舍五入。
初始化按钮或设置color属性时,通过调用以下函数来设置背景图像:
private func createImageFrom(color: UIColor) -> UIImage {
// If color is clear, return clear image
if(color == UIColor.clear) {
return UIImage()
}
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), true, 0.0)
color.setFill()
UIRectFill(CGRect(x: 0, y: 0, width: 1, height: 1))
let image = UIGraphicsGetImageFromCurrentImageContext()!
return image
}
图像创建如下:
REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
总体来说效果很好,但是在上述目标颜色的情况下,我遇到了问题。
我希望IBDesignable按钮可以根据我在情节提要中分配的颜色创建背景图像,并且当我构建不同的目标时,该颜色会有所不同。
当我构建并运行目标B时,即使我期望是蓝色,IBDesignable按钮上的颜色也会显示为红色。当我构建目标A并显示蓝色而不是红色时,也可能发生这种情况。
即使目标将颜色指示为蓝色,该颜色也会在情节提要和命名的拾色器中显示为红色-但是,这对于其他元素来说不是问题,因为一旦目标运行后,就会使用正确的颜色-除自定义IBDesignable外,所有内容均适用。
在命名的颜色选择器中显示的颜色是在IBDesignable中显示的颜色。每当我关闭并重新启动XCode时,颜色就会随机变化。
以前有人遇到过这个确切或类似的问题吗?我目前想知道构建过程中的哪个阶段没有按预期进行。
这是否是每次生成运行项目时都无法完全重建项目的问题?
任何建议都会受到赞赏。
答案 0 :(得分:0)
我有同样的问题。我有2个目标和2个xcassets文件,每个目标一个。两者都包含一种名为“主色”的颜色,对于目标A是蓝色,对于目标B是橙色。在代码中使用UIColor(named: "primary")
可以按预期工作,颜色会根据所选目标而变化。
切换目标并不会不会用正确的颜色更新Interface Builder中的情节提要,“ primary”保留其先前的值。但是,在运行时,将“ primary”设置为例如情节提要中的背景色或淡色。
唯一的例外是在情节提要中为IBInspectable值分配“主要” 时,然后将IBInspectable设置为在Interface Builder中显示的错误颜色,即使该颜色不是在选定目标的xcassets文件中。
我已经确认在情节提要的XML的底部添加了一个<namedColor>
标记,IBInspectable似乎正在使用该值而不是运行时值。使用目标之间共享的命名颜色时,IBInspectables没有问题。
Xcode版本:10.3 部署目标:iOS 11.0