SwiftUI - 无法更改图像图标的颜色

C. *_*dal 35 swiftui

我正在尝试构建我自己的自定义标签栏视图,而在构建我的自定义按钮时,我无法更改 Image() 的颜色。

struct TabBarButton: View {
      let title: String
      let icon: String


      var body: some View {
        return GeometryReader{ geometry in
           VStack {
            Image(self.icon)
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: geometry.size.width/2, height: CGFloat(25))
              .foregroundColor(.white)

            Text(self.title)
                .font(.system(size: 8))
                .foregroundColor(Color.white)
          }
      }
    }

  }
Run Code Online (Sandbox Code Playgroud)

我尝试过 foregroundColor(Color.white)、accentColor(Color.white) 和一些不同的颜色乘数。除了默认的黑色之外,是否有其他颜色没有其他原因?简单的修复只是获得白色图标,但希望我现在可以解决这个问题。

Asp*_*eri 97

我不确定你想实现什么,但可能你只需要模板渲染模式,比如

Image(self.icon)
    .renderingMode(.template)
    .foregroundColor(.white)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道我必须设置`.foregroundColor()`。我假设一旦设置了“renderingMode”,它就会自动使用“Color.accentColor”。每当我将“Image”视图作为“Button”的标签时,它都会这样做,但是如果没有按钮,“Image”需要设置“.foregroundColor()”。 (2认同)

Moj*_*ini 15

单色图像(如图标和符号)

要使用修改器将颜色设置为单色图像foregroundColor,您应该确保图像renderingMode设置为template

与代码:
Image("Star")
    .renderingMode(.template)
    .foregroundColor(.yellow)
Run Code Online (Sandbox Code Playgroud)

或者

使用资产目录属性:

资产目录渲染模式

请注意,图像必须具有 Alpha 通道(如 PNG 或 PDF),否则您将得到一个彩色矩形!


多色符号

从 iOS 15 开始,Apple 引入了具有更多渲染模式支持的符号。您可以创建一个或更改一个并将其从以下位置导出SF Symbols.app

SF 符号演示

您还可以直接在代码中使用最多 3 种颜色,例如:

SF 符号演示


重新着色彩色图像!

SwiftUI 非常简单且功能强大,您可以使用一些修改器立即重新着色图像,例如blendingMode

混合实验


fly*_*001 9

在导入图标上的资产(从 导入*.pdf)中,设置图像集?呈现为 ?模板图片

在此处输入图片说明

在代码中:

Image("ImageFileName")
Run Code Online (Sandbox Code Playgroud)

或者:您可以添加“模板”后缀并设置“Redder 为默认值”。在文档中

如果图片名称以“Template”结尾,则将该图片作为模板,否则将其渲染为原始图片

并在代码中:

Image("ImageFileNameTemplate")
Run Code Online (Sandbox Code Playgroud)