Issue #680

For List in SwiftUI for macOS, it has default background color because of the enclosing NSScrollView via NSTableView that List uses under the hood. Using listRowBackground also gives no effect

The solution is to use a library like SwiftUI-Introspect

import Introspect

extension List {
    func removeBackground() -> some View {
        return introspectTableView { tableView in
            tableView.backgroundColor = .clear
            tableView.enclosingScrollView!.drawsBackground = false
        }
    }
}

then

List {
    ForEach(items) { item in
        // view here
    }
}
.removeBackground()

Or we can add extension on NSTableView to alter its content when it moves to superview

extension NSTableView {
    open override func viewDidMoveToWindow() {
        super.viewDidMoveToWindow()

        backgroundColor = NSColor.clear
        enclosingScrollView!.drawsBackground = false
    }
}

This works OK for me on macOS 10.15.5, 10.15.7 and macOS 10.11 beta. But it was reported crash during review on macOS 10.15.6

The app launches briefly and then quits without error message.

After inspecting crash log, it is because of viewDidMoveToWindow. So it’s wise not to mess with NSTableView for now

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.onmyway133.PushHero       	0x0000000104770b0a @objc NSTableView.viewDidMoveToWindow() (in Push Hero) (<compiler-generated>:296)
1   com.apple.AppKit              	0x00007fff2d8638ea -[NSView _setWindow:] + 2416
2   com.apple.AppKit              	0x00007fff2d8844ea -[NSControl _setWindow:] + 158
3   com.apple.AppKit              	0x00007fff2d946ace -[NSTableView _setWindow:] + 306

Updated at 2020-10-09 03:49:39