SwiftUI在macOS上的列表样式

3
在macOS上,使用SwiftUI,关于List:
我需要修改列表的背景颜色。
使用视图调试器,我看到List内部有一个ListCoresScrollView,其中包含一个内部的_NSScrollViewContentBackgroundView和NSVisualEffectView。该视图默认具有白色背景。我想改变那个特定视图(例如使其透明),因为它似乎是一个内部视图。
如何在列表上修改背景视图(在macOS中,不是iOS)?
顺便说一下,我尝试使用SidebarListStyle()。这确实提供了我想要的背景,但是...在SidebarListStyle中,拖动行为与默认行为不同(不希望)。因此,解决方案的备选方案可能是“如何修改SidebarListStyle上的拖动行为以模仿默认的拖动行为”?
这花费了我很多很多个小时,但是我无法想出一个合适的解决方案。是否有人可以提供有效的解决方案?
2个回答

4
更新 #2(大约30分钟后)...
这个有效 :)
extension NSTableView {
    open override func viewDidMoveToWindow() {
        super.viewDidMoveToWindow()

        // set the background color of every list
        backgroundColor = .clear
        enclosingScrollView?.drawsBackground = false
        enclosingScrollView?.backgroundColor = .clear
        enclosingScrollView?.autohidesScrollers = true
        enclosingScrollView?.verticalScroller = MyScroller()
    }
}

class MyScroller: NSScroller {
    override func draw(_ dirtyRect: NSRect) {
        self.drawKnob()
    }
}

原始回答

不确定您是否仍在寻找答案,但这是我成功接近的最接近的。 仍然无法使滚动条(尤其是背景)实际上透明。 但是,比我以前更接近了。

在项目中添加一个具有以下内容的swift文件(暂时,我只将其放在我的ContentView.swift文件的顶部)。

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

        // set the background color of every list
        backgroundColor = .clear
        headerView = nil
        enclosingScrollView?.drawsBackground = false
        enclosingScrollView?.backgroundColor = .clear
        enclosingScrollView?.hasHorizontalScroller = false
        enclosingScrollView?.autohidesScrollers = true
    }
}

根据我读到的,这个应该可以工作。但是,它没有。也许我不需要所有这些设置,但我会继续添加直到完全解决问题。
希望对你有帮助 - 如果你已经完全解决了,请告诉我。

1
非常感谢您的回答,RichS。这个方法非常有效。事实上,我发现即使在viewDidMoveToWindow()中不设置背景颜色为.clear,它似乎也能正常工作。 - Johannes

2

我对RichS的回答进行了一些尝试,发现以下内容在我的项目中已足够:

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

        backgroundColor = .clear
        enclosingScrollView?.drawsBackground = false
    }
}

如果您的滚动不按预期工作,那么您可以参考RichS上面的答案。但是,因人而异,请自行斟酌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接