iOS 13 深色模式下的UIBarButtonItem颜色

iOS 13 UIBarButtonItem color in dark mode

在深色模式和浅色模式之间切换时,我的 UIBarButtonItem 图像没有改变颜色。

我以编程方式设置颜色,并希望它在切换模式时在黑色和白色之间变化。 至少它适用于我的 NavigationBar 的 tintColor。

我设置:

myBarButton.tintColor = UIColor.white

并且按钮的图像在黑暗和明亮模式下保持白色。

另一方面,下面是浅色模式下的黑色和深色模式下的白色:

navigationBar.tintColor = UIColor.white

为什么它的行为不同,我如何将此功能添加到我的 UIBarButtonItem?

使用 iOS 13 的新外观 API: https://developer.apple.com/documentation/uikit/uinavigationbarappearance

示例:

let navStyle = UINavigationBarAppearance()

let buttonStyle = UIBarButtonItemAppearance()
// Change properties of buttonStyle here with dynamic colours such as UIColor.label.
style.buttonAppearance = buttonStyle
style.doneButtonAppearance = ...
style.backButtonAppearance = ...

navigationController?.navigationBar.standardAppearance = navStyle
navigationController?.navigationBar.scrollEdgeAppearance = ...
navigationController?.navigationBar.compactAppearance = ...

UIColor.white 不是 动态颜色。无论外观设置如何,它都是白色的。如果你想要一种根据外观而不同的颜色,你需要采用一种新的动态系统颜色(例如,UIColor.systemBackground 在浅色模式下为白色,在深色模式下为黑色),或者创建一个颜色资产资产目录中浅色和深色外观的不同颜色值。

这里有更多关于新系统颜色的信息:https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color#dynamic-system-colors