gpt4 book ai didi

ios - IBDesignable 的自定义背景颜色属性不会根据目标进行更新

转载 作者:行者123 更新时间:2023-11-29 05:45:57 24 4
gpt4 key购买 nike

我在使用 XCode 时遇到了一个非常具体的问题。

设置

目标中同名的颜色不同

我的 XCode 项目中有两个目标,目标 A目标 B

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

两个目标都有 Storyboard ,其中包含使用“主要”颜色的标准 UI 元素。构建并运行目标会使界面显示目标的正确“主”颜色。

共享 IBDesignable

两个目标都为自定义 UIButton 分配了相同的 IBDesignable 类,该类通过创建 UIImage 作为背景来显示颜色,以便可以圆角。

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

private func refreshBackgroundWith(color: UIColor) {

let image = createImageFrom(color: color)
setBackgroundImage(image, for: UIControl.State.normal)

clipsToBounds = true
}

图像是这样创建的:

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
}

这通常运行良好,但是对于上述目标颜色情况,我遇到了问题。

期望

我期望 IBDesignable 按钮根据我在 Storyboard 中分配的颜色创建背景图像,并且当我构建不同的目标时该颜色会有所不同。

结果

当我构建并运行目标 B 时,IBDesignable 按钮上的颜色显示红色,尽管我期望蓝色。反过来也可能发生这种情况,当我构建目标 A 时,它显示蓝色而不是红色。

即使目标指示它为蓝色,颜色也在 Storyboard 和指定的颜色选择器中显示红色 - 然而,这对于其他元素来说不是问题,因为一旦运行目标,就会使用正确的颜色 -除了自定义 IBDesignable 之外的所有内容。

指定颜色选择器中显示的颜色就是 IBDesignable 中显示的颜色。每当我关闭并重新启动 XCode 时,该颜色就会随机变化。

<小时/>

以前有人遇到过这个确切的或类似的问题吗?我目前想知道构建过程中的哪一点没有按预期进行。

这是否是每次我构建项目运行时未完全重建项目的问题?

任何建议都将受到高度赞赏。

最佳答案

我也遇到了同样的问题。我有 2 个目标和 2 个 xcassets 文件,每个目标一个。两者都包含名为“primary”的颜色,目标 A 为蓝色,目标 B 为橙色。使用 UIColor(named: "primary")代码按预期工作,颜色根据所选目标而变化。

切换目标不会不会用正确的颜色更新 Interface Builder 中的 Storyboard,“primary”会保留之前的值。然而,在运行时,当设置“primary”时,行为是正确的,例如 Storyboard中的背景或色调。

唯一的异常(exception)是在 Storyboard 中将“主要”分配给 IBInspectable 值时,它会将 IBInspectable 设置为在 Interface Builder 中显示的错误颜色,即使该颜色不是在所选目标的 xcassets 文件中。

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

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

关于ios - IBDesignable 的自定义背景颜色属性不会根据目标进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com