圆角LinearGradient上的ContextMenu在SwiftUI中产生锐边

1rhkuytd  于 2023-01-01  发布在  Swift
关注(0)|答案(2)|浏览(170)

我有以下看法:

struct ContentView: View {
    var body: some View {
        LinearGradient(gradient: Gradient(colors: [.blue, .red]), startPoint: .topTrailing, endPoint: .bottomLeading)
            .cornerRadius(16)
            .frame(width: 140, height: 140)
            .contextMenu {
                Button("", action: {})
            }
    }

}

但是,当调用ContextMenu时,边缘不会倒圆:

我试过几种方法,比如:

  • 应用clipShape修改器将其剪裁为RoundedRectangle
  • 将渐变环绕为RoundedRectangle视图的背景
  • 使用Color而不是LinearGradient(它可以按预期工作,但不是我所需要的)

然而没有工作。任何建议将不胜感激,谢谢!

ubbxdtey

ubbxdtey1#

.frame(...)之后添加以下代码:

.contentShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
n9vozmp4

n9vozmp42#

更新了Swift 5.7.2

    • 顶级域名:**
// Use the method that takes in ContentShapeKinds
.contentShape(.contextMenuPreview, RoundedRectangle(cornerRadius: 30))

放置在 * .frame(...)之后 * 和 * .contextMenu { ... }之前

    • 详细示例:**
var body: some View {
        VStack(alignment: .leading, spacing: .zero) {
            Text("Hello")
                .foregroundColor(.white)
                .font(.title)
        }
        .frame(maxWidth: .infinity, minHeight: 120)
        // These corner radii should match
        .background(RoundedRectangle(cornerRadius: 30).foregroundColor(.blue))
        .contentShape(.contextMenuPreview, RoundedRectangle(cornerRadius: 30))
        .contextMenu {
            Button("Look!") { print("We did it!") }
        }
    }

上面的代码生成一个contextMenu,如下所示:

...而不是这个:

相关问题