0

我正在尝试模仿您在秒表应用程序等地方看到的分组取消/设置按钮对。我目前已经通过使用两个与不同的和ZStack重叠的 a 来完成此操作。RoundedRectanglecornerRadiuspadding

这似乎在形状方面效果很好,但有一个微妙的颜色重叠,我还没有找到解决方法。

它是这样渲染的

我试过玩BlendMode“不透明”,但没有运气。

Button(action: {}, label: { Text("Cancel").foregroundColor(Color.white) })
.background(VStack(spacing: 0) {
               ZStack {
                   RoundedRectangle(cornerRadius:20).foregroundColor(Color.gray)
                   RoundedRectangle(cornerRadius: 8).foregroundColor(Color.gray).padding(.leading, 20)
               }})

有没有人有任何想法?

4

1 回答 1

0

我意识到这实际上是正在应用的按钮的强调色。如果我将 设置accentColourColor.clear,则此重叠消失。

我实际上在其他地方需要这种行为,所以我遵循了Alejandro Martinez 的关于创建可重用 Button 样式的指南并创建了这个:

public struct AccentlessButtonStyle: ButtonStyle {
    public func body(configuration: Button<Self.Label>, isPressed: Bool) -> some View {
         configuration.accentColor(Color.clear)
    }
}

extension StaticMember where Base: ButtonStyle {
    public static var accentless: AccentlessButtonStyle.Member {
        StaticMember<AccentlessButtonStyle>(AccentlessButtonStyle())
    }
}

它似乎以所有其他方式继承了默认按钮样式。

使用它需要这样:

Button(action: {}, label: { Text("Cancel") }).buttonStyle(.accentless)
于 2019-07-20T15:33:19.527 回答