如何在 UIKit 中更改 SF Symbols 的图标颜色?

fra*_*eng 30 colors uikit ios sf-symbols

在 中SwiftUI,您可以使用foregroundColor修饰符更改图标的颜色。所以我认为应该有一种方法可以改变UIKit. 我查阅了文档,并没有找到任何与之相关的内容。

现在可以吗?

let iconImage = UIImage(systemName: "chevron.right", 
    withConfiguration: UIImage.SymbolConfiguration(pointSize: 16, weight: .regular, scale: .medium))
Run Code Online (Sandbox Code Playgroud)

Shi*_*esh 44

使用以下代码更改 SFSymbols 图标颜色

let imageIcon = UIImage(systemName: "heart.fill")?.withTintColor(.red, renderingMode: .alwaysOriginal)
    imageView.image = imageIcon
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明


Yon*_*nat 40

用:

let icon = UIImageView(image: iconImage.withRenderingMode(.alwaysTemplate))
icon.tintColor = .red
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 UIButton,请按上述模板化图像,然后设置按钮色调颜色。 (3认同)
  • 它在没有第二行的情况下使用了它,但在“icon”上使用了 .image ,然后我像往常一样在 SwiftUI 中执行 `.foregroundColor(.red)` :) (2认同)

小智 9

一个小小的补充。如果对任何人有帮助,我很高兴。我们不仅可以组合不同的颜色,还可以组合不同的尺寸和重量。例如你可以这样做:

let colorsConfig = UIImage.SymbolConfiguration(paletteColors: [.white, .magenta])
let sizeConfig = UIImage.SymbolConfiguration(pointSize: 30, weight: .bold)
let image = UIImage(systemName: "plus.circle.fill", withConfiguration: colorsConfig.applying(sizeConfig))
button.setImage(image, for: .normal)
Run Code Online (Sandbox Code Playgroud)


bar*_*che 7

let image = UIImage(systemName: "arrow.up.circle.fill")?.withTintColor(.black, renderingMode: .alwaysOriginal)
button.setImage(image, for: .normal)
Run Code Online (Sandbox Code Playgroud)

  • 似乎这是复制最受好评的答案的解决方案 - /sf/answers/4295999781/ (3认同)

小智 6

let iconImage = UIImage(systemName: "chevron.right",
                                            withConfiguration: UIImage.SymbolConfiguration(pointSize: 16, weight: .regular, scale: .medium))?.withTintColor(.systemGreen)
Run Code Online (Sandbox Code Playgroud)

  • 请添加某种注释而不仅仅是代码。 (8认同)

qwa*_*wsa 6

muteCall.setImage(UIImage(systemName: "mic.slash")?.withTintColor(.white, renderingMode: .alwaysOriginal), for: .normal)
Run Code Online (Sandbox Code Playgroud)

将渲染设置为始终原始

  • 似乎这是复制最受好评的答案的解决方案 - /sf/answers/4295999781/ (2认同)