macOS上的SwiftUI ListStyle

问题描述 投票:3回答:1

在macOS上,使用SwiftUI,与列表有关:

我需要修改列表的背景色。

使用视图调试器,我看到列表内部有一个ListCoresScrollView,内部有一个_NSScrollViewContentBackgroundView和一个NSVisualEffectView。该视图默认情况下具有白色背景。我想更改该特定视图(例如,使其变得透明),因为它似乎是内部视图。

如何修改列表的背景视图(在macOS中,not IOS)?

Btw,我尝试使用SidebarListStyle()。那确实提供了我想要的背景,但是... SidebarListStyle中的拖动行为是不同的(不需要的)。因此,我的问题的另一种解决方案是“如何在SidebarListStyle上修改拖动行为以模仿默认的拖动行为”?

这花了我很多小时,但我无法提出适当的解决方案。谁能提供可行的解决方案?

macos list background swiftui drag
1个回答
0
投票

更新#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()
    }
}

原始答案

不确定您是否仍在寻找答案,但这是我设法获得的最接近。仍然不能使滚动条(尤其是背景)实际上是透明的。但是,比我近。

在您的项目中为此添加一个快速文件(目前,我只是将其放在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
    }
}

从我阅读的内容来看,此[[应该

有效。但是,事实并非如此。我也许不需要所有这些设置,但是我会继续添加,直到我能完全使用它。HTH-如果您已完全解决它,请告诉我。
© www.soinside.com 2019 - 2024. All rights reserved.