我正在尝试更改SF Symbol
被叫内部的clear(transparent)部分的颜色delete.left.fill
。到目前为止,我已经尝试如下
Button(action: { return }, label: {
Image(systemName: "delete.left.fill")
.background(Color.black)
//.accentColor(.black)
.font(.system(size: self.fontSize*0.75))
})
.frame(width: self.width, height: self.width)
.foregroundColor(.lightGray)
//.background(Color.black)
当我如上所述运行代码时,结果就像
首先,x
符号的内部与背景颜色相同。我要它变黑。
backgroundColor
,Button
然后整个变成Button
黑色。accentColor
的Image
黑色。没有改变。backgroundColor
的
Image
黑色。结果可以在图像中看到。问题是,是否有一种方法可以通过编程方式使x
里面的东西变成symbol
黑色?
您可以遮罩背景并应用自定义样式:
struct MyButtonStyle: ButtonStyle {
public func makeBody(configuration: MyButtonStyle.Configuration) -> some View {
configuration.label
.compositingGroup()
.opacity(configuration.isPressed ? 0.5 : 1.0)
}
}
Button(action: {}) {
Image(systemName: "delete.left.fill")
.foregroundColor(.green)
.background(
Color.black.mask(Circle())
)
}.buttonStyle(MyButtonStyle())
该圆圈可能不适合任何用法,但是对于此图像,它可以正常工作:
尽管还有一个问题,但是它起作用了,但是当我点击按钮效果时,它后面有一个灰色圆圈,黑色部分逐渐变成了白色,这比它应该做的更多。有什么建议吗?
是的 这很丑。对不起,我错过了。我更新我的答案。现在,在点击按钮时,按钮应该表现良好
奥斯卡归您所有。但是,这如何
compositonGroup()
工作?@Faruk在应用修饰符之前,将子视图/修饰符视为一个。在这种情况下,
label
(=图像,前景,背景和颜色)的视图总的来说,仍然不是最好的解决方案。更好的方法可能是重新渲染图像,以所需的颜色填充所有内部纯色蒙版像素。但是我没有时间去做。