iOS15 Xcode 13 全局强调色无效
iOS15 Xcode 13 Global Accent Color not working
我正在使用 Xcode 13 的最新测试版和 iOS 14
的应用程序,现在我遇到了这个奇怪的问题:
在 iOS 15
更新之前,我的应用程序的全局强调色工作正常,当时颜色现在设置为默认蓝色,而之前它是我的自定义颜色。
这是资产目录:
这是我的项目设置页面,您可以在其中看到强调色是正确的。
这就是应用程序构建时的样子。当需要非常深的 blue/purple 颜色时,颜色是默认的蓝色。
我们在我们的应用程序中使用 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
调用它,我们的全局强调色现在得到了尊重。
不要问我为什么...我不能告诉你。
我终于在 this AppleDeveloperForum Thread
上找到了临时解决方法
感谢:@chad_sykes 此答案
I found an alternate solution, which was to set the .accentColor on the main view in the WindowGroup and it gets used across the app.
@main
struct CurvApp: App {
var body: some Scene {
WindowGroup {
myMainView
.accentColor(CurvGlobalAppearance.curvAccentColor)
}
}
}
我正在使用 Xcode 13 的最新测试版和 iOS 14
的应用程序,现在我遇到了这个奇怪的问题:
在 iOS 15
更新之前,我的应用程序的全局强调色工作正常,当时颜色现在设置为默认蓝色,而之前它是我的自定义颜色。
这是资产目录:
这是我的项目设置页面,您可以在其中看到强调色是正确的。
这就是应用程序构建时的样子。当需要非常深的 blue/purple 颜色时,颜色是默认的蓝色。
我们在我们的应用程序中使用 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
调用它,我们的全局强调色现在得到了尊重。
不要问我为什么...我不能告诉你。
我终于在 this AppleDeveloperForum Thread
上找到了临时解决方法感谢:@chad_sykes 此答案
I found an alternate solution, which was to set the .accentColor on the main view in the WindowGroup and it gets used across the app.
@main
struct CurvApp: App {
var body: some Scene {
WindowGroup {
myMainView
.accentColor(CurvGlobalAppearance.curvAccentColor)
}
}
}