Ios IB可设计';s的自定义背景色属性不为';t根据目标进行更新

Ios IB可设计';s的自定义背景色属性不为';t根据目标进行更新,ios,swift,xcode,uicolor,ibdesignable,Ios,Swift,Xcode,Uicolor,Ibdesignable,我在使用XCode时遇到了一个非常特殊的问题 安装程序 相同名称的颜色在目标中不同 我的XCode项目中有两个目标,目标A和目标B 它们都有一个名为Colors.xcasets的单独资源文件夹,其颜色名为“Primary”。目标A中的“主”颜色为红色,目标B中的“主”颜色为蓝色 这两个目标都有使用颜色“Primary”的标准UI元素的故事板。构建和运行目标会使界面显示目标的正确“主”颜色 共享可设计 这两个目标都为自定义的ui按钮指定了相同的IBDesignable类,该按钮通过创建ui图像作为

我在使用XCode时遇到了一个非常特殊的问题

安装程序 相同名称的颜色在目标中不同 我的XCode项目中有两个目标,目标A目标B

它们都有一个名为Colors.xcasets的单独资源文件夹,其颜色名为“Primary”目标A中的“主”颜色为红色,目标B中的“主”颜色为蓝色

这两个目标都有使用颜色“Primary”的标准UI元素的故事板。构建和运行目标会使界面显示目标的正确“主”颜色

共享可设计 这两个目标都为自定义的
ui按钮指定了相同的IBDesignable类,该按钮通过创建
ui图像
作为背景来显示颜色,因此可以对其进行舍入

初始化按钮或设置颜色属性时,通过调用以下函数设置背景图像:

private func refreshbackgroundith(颜色:UIColor){
让image=createImageFrom(颜色:color)
setBackgroundImage(图像,用于:UIControl.State.normal)
clipsToBounds=true
}
图像的创建方式如下所示:

private func createImageFrom(颜色:UIColor)->UIImage{
//如果颜色清晰,则返回清晰图像
if(color==UIColor.clear){
返回UIImage()
}
UIGraphicsBeginImageContextWithOptions(CGSize(宽度:1,高度:1),true,0.0)
color.setFill()
UIRectFill(CGRect(x:0,y:0,宽度:1,高度:1))
让image=UIGraphicsGetImageFromCurrentImageContext()!
返回图像
}
这在一般情况下效果很好,但是在上述目标颜色的情况下,我遇到了这个问题

期望值 我希望IBDesignable按钮根据我在故事板中指定的颜色创建背景图像,并且当我构建不同的目标时,该颜色会有所不同

结果 当我构建并运行目标B时,IBDesignable按钮上的颜色显示为红色,尽管我预期为蓝色。这也可能发生在另一种情况下,当我构建目标A时,它显示为蓝色而不是红色

该颜色在情节提要和命名的颜色选择器中也显示为红色,即使目标指示它为蓝色-但这对于其他元素来说不是问题,因为一旦目标运行,将在除自定义IBDesignable之外的所有内容上使用正确的颜色

在命名颜色选择器中显示的任何颜色都是在IBDesignable中显示的颜色。每当我关闭并重新启动XCode时,该颜色会随机变化


以前有没有人遇到过这样或类似的问题?我现在想知道在这个过程中的哪一点上构建没有按照预期进行

这可能是因为每次我构建项目运行时都没有完全重建项目的问题吗


非常感谢您的建议。

我也有同样的问题。我有2个目标和2个xcassets文件,每个目标一个。两者都包含名为“primary”的颜色,目标a为蓝色,目标B为橙色。在代码中使用
UIColor(名为:“primary”)
时,颜色会根据所选目标的不同而变化

切换目标不会用正确的颜色更新Interface Builder中的情节提要,但“primary”保留以前的值。但是,在运行时,将“主”设置为故事板中的背景色或色调时,该行为是正确的

唯一的例外是,将“主”指定给情节提要中的IBInspectable值时,它会将IBInspectable设置为在Interface Builder中显示的错误颜色,即使该颜色不在选定目标的xcassets文件中

我已经确认在故事板的XML底部添加了一个
标记,IBInspectable似乎正在使用该值而不是运行时值。使用目标之间共享的命名颜色时,IBInspectables没有问题

Xcode版本:10.3 部署目标:iOS 11.0