Xcode:如果颜色在框架中,暗黑模式无法正常工作。

4
在xcode中,我在一个工作区内工作,其中包含一个基本项目和一个框架。所有颜色都在框架内定义。当我在故事板上使用框架的颜色资源配置标签时,颜色会被正确地获取,但如果我切换到深色模式,则颜色不会改变,始终保持不变。

Configuration color label in project

在深色模式下设置textColorBlack应该显示为白色,但它没有起作用。

textColorBlack in framework project

我不明白问题在哪里。


请移除任何其他选项,只保留暗色和亮色选择。请尝试。 - Himanshu Patel
我尝试着移除它,但它仍然不起作用。 - momomorez
2个回答

4
Xib/Storyboard只是保留了所选颜色名称(在所有空间中从开发时间可见),但在运行时,当颜色模式更改时,它无法找到该颜色,因为默认情况下它会在主包中按名称搜索。相反,我们必须通过编程方式分配颜色,并指定颜色的确切位置,例如:
override func viewDidLoad() {
    super.viewDidLoad()

    label.textColor = UIColor(named: "myColor", 
          in: Bundle(identifier: "framework_identifier") ?? .main,  // << here !!
          compatibleWith: .current)
}

@IBOutlet weak var label: UILabel!

已测试过 Xcode 13.4 / iOS 15.5

演示


我会这么说,这是故事板代码中的一个错误。在Swift包中,命名颜色是有效的。在Interface Builder中查看时,浅色/深色版本是有效的,但是当你启动应用程序并且遇到问题时,你会感到非常困扰。:-(不管怎样,还是谢谢你的解释。 - undefined

3
在我们的情况下,我们定义了一些扩展,从资源目录中加载相应的颜色:
public extension Color {
    public enum Primary {
        static let green = Color("PrimaryGreen", bundle: .module)
    }
}
public extension UIColor {
    public enum Primary {
        static let green = UIColor(Color.Primary.green)
    }
}

SwiftUI 的 Color 直接从资源目录加载,但 UIKit 的 UIColor 是从已加载的 Color 实例化。这会引起所描述的问题,因为当转换到暗模式时,UIColor 不会自动更新。当然,解决方案是直接从资源目录加载 UIColor


谢谢,这对我们有用,所以赏金归你了。我不知道它是否也适用于原始发布者。 - Björn Kechel

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