从pod中获取的命名颜色仅使用浅色外观而非深色。

11

我有一个私有的pod,里面有我的资源目录。其中有一个命名颜色,设定了“任何外观”和“深色外观”的值。在我消费该pod的主项目中,我可以设置颜色storyboard color selection

当我在暗模式和亮模式之间切换界面样式时,它在storyboard中看起来甚至是正确的。问题是当我运行代码时,它只使用亮色外观,即使在暗模式下也是如此。更令人困惑的是,如果我通过代码设置颜色,例如viewDidLoad,它会按预期工作。

let bundle = Bundle(for: PrivatePodClass.self)
let color = UIColor(named: "tableViewSectionHeader", in: bundle, compatibleWith: nil)
// Works
view.backgroundColor = color

我不确定这是否是XCode 11的问题还是cocoapods的问题,但如果可以的话,我希望不必通过代码强制设置颜色。


你尝试在compatibleWith:参数中添加traitCollection了吗?我认为根据traitcollection外观更新的颜色是UIDynamicColor(或类似的东西)。因此,如果您不传递traitcollection,则会使用标准外观。 - henrik-dmg
这不会影响主要问题,即通过Storyboard(来自另一个pod)设置颜色从未使用暗模式。但是通过代码设置它可以正常工作。当在Storyboard中将界面样式设置为暗时,看起来似乎是正确的,但实际上在运行时它从未呈现出那种方式。 - Ben
我认为故事板只能从同一捆绑包中读取资源。因此,您可以将故事板放在与资源相同的框架捆绑包中,或者将资源放在故事板所在的主捆绑包中。您可以使用storyboardWithName:bundle:从捆绑包中获取故事板。 - seeinvisible
@Ben 你最终找到了解决方案吗? - Alexandre Nussbaumer
1
@AlexandreNussbaumer 我没有。不过在发布这个问题后不久,我就离开了那个项目,所以我不能说我已经深入研究过它了。 - Ben
显示剩余3条评论
2个回答

0
contentView.backgroundColor = UIColor(named: "redColor", in: nibBundle, compatibleWith: nil)

bundle替换为nibBundle。这对我有用。 输入图像描述


问题是(还是吗?已经有一段时间没有尝试解决这个问题了),当通过Storyboard设置颜色时,它们不起作用。但是通过代码设置时没有问题。 - Ben

0

问题实际上位于模块中。 如果您的Colors.sassets文件(其中定义了命名颜色)未位于主模块中,则在运行时它将无法正常工作。

当前的解决方法可能是使用构建阶段中的脚本将外部模块中的资产文件复制到主模块中。

我在这里找到了解决方案,您可以在此处找到有关它的其他信息:https://github.com/lechuckcaptain/TestResourcesIntoModule


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接