我在 iOS 应用程序的资源目录中添加了一种名为 AccentColor 的非蓝色。运行我的应用程序时,色调颜色默认为蓝色。
构建设置中的“全局强调颜色名称”已正确设置为“AccentColor”。我还需要设置什么吗?什么设置可以覆盖这个?
我在我的应用程序中遇到了同样的问题。它曾经可以工作,但在某些时候所有控件都变成默认的蓝色而不是我的自定义颜色。我确认目标构建设置中的全局强调颜色名称是正确的,并且资产目录已添加到该目标中。
经过一番调试,找到了原因。这行代码破坏了全局强调色(使用 Xcode 14 beta 5 测试):
UINavigationBar.appearance().largeTitleTextAttributes = [.font : UIFont(descriptor: UIFontDescriptor.preferredFontDescriptor(withTextStyle: .largeTitle).withDesign(.rounded)!.withSymbolicTraits(.traitBold)!, size: 34)]
但是,这样的事情并不会破坏它:
UINavigationBar.appearance().largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 34)]
超级奇怪。如果您有任何
UINavigationBar
外观覆盖,请尝试将其注释掉,看看这是否会导致您的问题。
作为解决方法,我正在做的是在 SceneDelegate 中设置窗口的
tintColor
(为我的 SwiftUI 应用程序手动添加):
final class SceneDelegate: UIResponder, UIWindowSceneDelegate {
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
(scene as? UIWindowScene)?.keyWindow?.tintColor = UIColor(named: "AccentColor")
}
}
不确定你的问题的原因是否与我的相同,但我突然发现了同样的效果。尽管
AccentColor
是在 Assets
中定义的,并且绑定到“全局强调颜色名称”,但预览和应用程序感觉回到了标准蓝色。
事实证明,我在调用
UIViewController
之前实例化了一个扩展 WindowGroup
的类型。尽管该实例尚未在任何地方使用,但只需实例化它就足以打破与“全局强调颜色名称”的绑定。将类型的实例化推迟到调用 WindowGroup
后,强调色绑定再次开始工作。