AccentColor 显示错误,颜色被忽略

问题描述 投票:0回答:2

我在 iOS 应用程序的资源目录中添加了一种名为 AccentColor 的非蓝色。运行我的应用程序时,色调颜色默认为蓝色。

构建设置中的“全局强调颜色名称”已正确设置为“AccentColor”。我还需要设置什么吗?什么设置可以覆盖这个?

swift swiftui colors assets tint
2个回答
1
投票

我在我的应用程序中遇到了同样的问题。它曾经可以工作,但在某些时候所有控件都变成默认的蓝色而不是我的自定义颜色。我确认目标构建设置中的全局强调颜色名称是正确的,并且资产目录已添加到该目标中。

经过一番调试,找到了原因。这行代码破坏了全局强调色(使用 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")
    }
    
}

0
投票

不确定你的问题的原因是否与我的相同,但我突然发现了同样的效果。尽管

AccentColor
是在
Assets
中定义的,并且绑定到“全局强调颜色名称”,但预览和应用程序感觉回到了标准蓝色。

事实证明,我在调用

UIViewController
之前实例化了一个扩展
WindowGroup
的类型。尽管该实例尚未在任何地方使用,但只需实例化它就足以打破与“全局强调颜色名称”的绑定。将类型的实例化推迟到调用
WindowGroup
后,强调色绑定再次开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.