iOS15 Xcode 13 全局强调色不起作用

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

我正在使用 Xcode 13 的最新测试版和

iOS 14
应用程序,现在我面临这个奇怪的问题: 我的应用程序的全局强调色工作正常,直到
iOS 15
更新,此时颜色现在设置为默认蓝色,而之前是我的自定义颜色。

这是资产目录:
enter image description here

这是我的项目设置页面,您可以在其中看到强调颜色是正确的。
enter image description here

这就是应用程序构建后的样子。当需要真正的深蓝色/紫色时,颜色是默认的蓝色。
enter image description here

swiftui ios15 xcode13
3个回答
3
投票

我们在应用程序中使用了

UIAppearance
API。我们没有设置色调颜色,但在应用程序完成启动后以某种方式调用任何 UIAppearance API 会导致此行为。

enum AppAppearance {
    static func configure() {
        configureCustomBarApperance()
        UITableView.appearance().backgroundColor = UIColor(named: .primaryBackground)
        UITextView.appearance().backgroundColor = nil
        UIScrollView.appearance().keyboardDismissMode = .interactive
    }

    static func configureCustomBarApperance() {
        let barAppearance = UIBarAppearance()
        barAppearance.configureWithTransparentBackground()
        barAppearance.backgroundColor = UIColor(named: .primaryBackground)
        // Toolbars
        let toolbarAppearance = UIToolbarAppearance(barAppearance: barAppearance)
        UIToolbar.appearance().standardAppearance = toolbarAppearance
        UIToolbar.appearance().compactAppearance = toolbarAppearance
        UIToolbar.appearance().scrollEdgeAppearance = toolbarAppearance
        // Navigation Bars
        let navBarAppearance = UINavigationBarAppearance(barAppearance: barAppearance)
        navBarAppearance.titleTextAttributes[.foregroundColor] = UIColor.secondaryLabel
        UINavigationBar.appearance().standardAppearance = navBarAppearance
        UINavigationBar.appearance().compactAppearance = navBarAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
        // Tab Bars
        let tabBarAppearance = UITabBarAppearance()
        tabBarAppearance.configureWithTransparentBackground()
        tabBarAppearance.backgroundColor = UIColor(named: .secondaryBackground)
        UITabBar.appearance().standardAppearance = tabBarAppearance
        UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
    }
}

我们的解决方案是将所有 UIAppearance API 工作移至

AppDelegate
的初始化程序,这为我们解决了问题。因此,我们不是在应用程序启动完成后调用
AppAppearance.configure()
...而是从
AppDelegate.init
调用它,我们的全局强调色现在得到了尊重。

别问我为什么...我不能告诉你。


3
投票

我终于在thisAppleDeveloperForum Thread

上找到了临时解决方法

此答案归功于:@chad_sykes

我找到了一个替代解决方案,即在 WindowGroup 的主视图上设置 .accentColor 并在整个应用程序中使用。

@main struct CurvApp: App { var body: some Scene { WindowGroup { myMainView .accentColor(CurvGlobalAppearance.curvAccentColor) } } }
    

0
投票
我也遇到了类似的问题

UIKit

。在资产目录中设置 
AccentColor
 后,一切正常,接受一些 UI 组件,例如 
UIAlertController
 选项。

SceneDelegate

(或
AppDelegate
)中设置窗口色调颜色后,它就起作用了。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // ... window?.windowScene = windowSence // ... }
    
© www.soinside.com 2019 - 2024. All rights reserved.