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


List {
    ForEach(items) { item in
        // view here

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

extension NSTableView {
    open override func 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:
0   com.onmyway133.PushHero       	0x0000000104770b0a @objc NSTableView.viewDidMoveToWindow() (in Push Hero) (<compiler-generated>:296)
1              	0x00007fff2d8638ea -[NSView _setWindow:] + 2416
2              	0x00007fff2d8844ea -[NSControl _setWindow:] + 158
3              	0x00007fff2d946ace -[NSTableView _setWindow:] + 306

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