深色模式下的iOS 13 UIBarButtonItem颜色

时间:2019-10-11 12:30:45

标签: ios swift uibarbuttonitem uicolor ios-darkmode

在黑暗和明亮模式之间切换时,我的UIBarButtonItem图像不会更改其颜色。

我以编程方式设置颜色,并期望在切换模式时在黑色和白色之间切换。 至少它与我的NavigationBar的tintColor兼容。

我设置:

myBarButton.tintColor = UIColor.white

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

另一方面,以下是亮模式下的黑色和暗模式下的白色:

navigationBar.tintColor = UIColor.white

为什么它的行为有所不同,以及如何将此功能添加到UIBarButtonItem中?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用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 = ...