gpt4 book ai didi

macos - macOS 上的 SwiftUI ListStyle

转载 作者:行者123 更新时间:2023-12-04 01:36:22 27 4
gpt4 key购买 nike

在 macOS 上,使用 SwiftUI,关于列表:

我需要修改List的背景色。

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

如何修改列表的背景 View (在 macOS 中,不是 IOS)?

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

我花了很多时间,但我想不出一个合适的解决方案。谁能提供可行的解决方案?

最佳答案

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

据我所读,这应该有效。但是,事实并非如此。我可能不需要所有这些设置,但我会继续添加,直到我可以让它完全正常工作。

HTH - 如果您已完全解决问题,请告诉我。

关于macos - macOS 上的 SwiftUI ListStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com