如何在 SwiftUI 中将 Apple ColorPicker 的布局从圆形更改为方形?

mar*_*ars 7 color-picker swiftui

ColorPicker默认的按钮样式是圆形,如下所示。

\n

在此输入图像描述

\n

我想将圆形按钮的样式更改为矩形。但似乎没有 API 可以改变它的风格。所以我在它上面放了一个矩形,并将它的 allowedHitTesting 设置为 false 以将单击事件传输到 ColorPicker。

\n

在此输入图像描述

\n
struct ColorPickerView: View {\n    @State private var colorValue = Color.orange\n    var body: some View {\n        ZStack() {\n            ColorPicker("", selection: $colorValue)\n                .labelsHidden()\n            Rectangle()\n                .foregroundColor(.blue)\n                .frame(width: 40, height: 40, alignment: .center)\n                .allowsHitTesting(false)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是点击后ColorPicker没有出现。

\n

我在矩形下面画了一个圆圈来测试 allowedHitTesting 是否有用。它可以正常响应点击手势打印“Circle tapped!”。

\n
struct ColorPickerView: View {\n    @State private var colorValue = Color.orange\n    var body: some View {\n        ZStack() {\n            ColorPicker("", selection: $colorValue)\n                .labelsHidden()\n            Rectangle()\n                .foregroundColor(.blue)\n                .frame(width: 40, height: 40, alignment: .center)\n                .onTapGesture {\n                    print("Circle tapped!")\n                }\n            Rectangle()\n                .foregroundColor(.blue)\n                .frame(width: 40, height: 40, alignment: .center)\n                .allowsHitTesting(false)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

为什么ColorPicker无法响应点击手势?或者有没有办法自定义ColorPicker按钮\xef\xbc\x9f

\n

use*_*ser 16

只需使用opacity,并将ColorPicker发送到overlay,如代码所示:


在此输入图像描述

struct SquareColorPickerView: View {
    
    @Binding var colorValue: Color
    
    var body: some View {
        
        colorValue
            .frame(width: 40, height: 40, alignment: .center)
            .cornerRadius(10.0)
            .overlay(RoundedRectangle(cornerRadius: 10.0).stroke(Color.white, style: StrokeStyle(lineWidth: 5)))
            .padding(10)
            .background(AngularGradient(gradient: Gradient(colors: [.red,.yellow,.green,.blue,.purple,.pink]), center:.center).cornerRadius(20.0))
            .overlay(ColorPicker("", selection: $colorValue).labelsHidden().opacity(0.015))
            .shadow(radius: 5.0)

    }
}
Run Code Online (Sandbox Code Playgroud)

使用案例:

struct ContentView: View {
    
    @State private var colorValue = Color.orange
    
    var body: some View {

        SquareColorPickerView(colorValue: $colorValue)

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您使用 swiftui 有多久了?我怎样才能达到您的水平? (7认同)