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