2

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

这是资产目录:
在此处输入图像描述

这是我的项目设置页面,您可以在其中看到强调色是正确的。
在此处输入图像描述

这就是应用程序在构建时的样子。当它需要是真正的深蓝色/紫色时,颜色是默认的蓝色。
在此处输入图像描述

4

2 回答 2

0

我们在我们的应用程序中使用UIAppearanceAPI。我们没有设置色调颜色,但在应用程序完成启动后以某种方式调用任何 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,我们的 Global Accent Color 现在正在被兑现。

不要问我为什么……我不能告诉你。

于 2021-09-17T16:32:15.047 回答
0

我终于在这个AppleDeveloperForum 线程上找到了一个临时解决方法

归功于:@chad_sykes这个答案

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

@main
struct CurvApp: App {
    var body: some Scene {
        WindowGroup {
            myMainView
                .accentColor(CurvGlobalAppearance.curvAccentColor)
        }
    }
}
于 2021-10-05T11:57:59.697 回答