如果您在使用 iOS 15 并且正在使用新的 UIButton.Configuration
API,则可能需要通过 imageColorTransformer
进行操作。
效果如下:
configuration.imageColorTransformer = UIConfigurationColorTransformer { _ in .green }
为了方便起见,您可以创建一个扩展:
extension UIButton.Configuration {
func imageColor(_ color: UIColor) -> UIButton.Configuration {
var configuration = self
configuration.imageColorTransformer = UIConfigurationColorTransformer { _ in color }
return configuration
}
}
configuration = configuration.imageColor(.green)
和其他答案一样,图像本身必须在Xcode资源的“Render As - Template Image”中,或者在代码中使用image.withRenderingMode(.alwaysTemplate)
额外提示:
如果您希望按钮高亮时更改图像颜色,那么您的配置扩展可能如下所示:
func imageColor(whenNormal: UIColor,
whenHighlighted: UIColor,
isHighlighted: Bool) -> UIButton.Configuration {
var configuration = self
configuration.imageColorTransformer = UIConfigurationColorTransformer { _ in
isHighlighted ? whenHighlighted : whenNormal
}
return configuration
}
而这本身必须从 configurationUpdateHandler
上下文中调用,如下所示:
someButton.configurationUpdateHandler = { button in
guard var configuration = button.configuration else { return }
configuration.image = UIImage(named: "some_image")
configuration = configuration.imageColor(whenNormal: .green,
whenHighlighted: .green.withAlphaComponent(0.7),
isHighlighted: button.isHighlighted)
button.configuration = configuration
}
请注意,
configurationUpdateHandler
也是您可以根据按钮状态实际定义不同图像的位置。