SwiftUI/macOS: 没有背景字段的 DatePicker

SwiftUI/macOS: DatePicker without background field

如何去除 macOS (!) 中 DatePicker 字段的阴影背景?
.textFieldStyle.background 无效。

我试过这个: 但似乎只适用于 TextField、TextEditor。 是否还有另一个 NSView 属性 可以设置?

        DatePicker("Start",
                   selection: $newDate,
                   displayedComponents: [.date])
            .datePickerStyle(.field)
//          .textFieldStyle(.plain)
//          .background(.clear)

根据上面提到的@Davidev 的原始答案找到了。在 DatePicker 上使用此扩展程序 .background

extension NSDatePicker {
    open override var frame: CGRect {
        didSet {
            backgroundColor = .clear //<<here clear
            isBezeled = false
            isBordered = false
            drawsBackground = true
        }
    }
}

这是可表示包装器方法的简化演示

测试 Xcode 13.2 / macOS 12.1

struct DemoView: View {
    @State private var newDate: Date = Date()

    var body: some View {
        VStack {
            Text("Selected: \(newDate)")
            MyDatePicker(selection: $newDate)
        }
    }
}

struct MyDatePicker: NSViewRepresentable {
    @Binding var selection: Date

    func makeNSView(context: Context) -> NSDatePicker {
        let picker = NSDatePicker()
        picker.isBordered = false
        picker.datePickerStyle = .textField
        picker.action = #selector(Coordinator.onValueChange(_:))
        picker.target = context.coordinator
        return picker
    }

    func updateNSView(_ picker: NSDatePicker, context: Context) {
        picker.dateValue = selection
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(owner: self)
    }

    class Coordinator: NSObject {
        private let owner: MyDatePicker
        init(owner: MyDatePicker) {
            self.owner = owner
        }

        @objc func onValueChange(_ sender: Any?) {
            if let picker = sender as? NSDatePicker {
                owner.selection = picker.dateValue
            }
        }
    }
}