[英]SwiftUI ListStyle on macOS
在 macOS 上,使用 SwiftUI,關於 List:
我需要修改列表的背景顏色。
使用視圖調試器,我看到列表中有一個 ListCoresScrollView,內部有一個_NSScrollViewContentBackgroundView
和一個 NSVisualEffectView。 該視圖默認為白色背景。 我想改變那個特定的視圖(例如變得透明),因為它似乎是一個內部視圖。
如何修改列表上的背景視圖(在 macOS 中,而不是在IOS 中)?
順便說一句,我嘗試使用 SidebarListStyle()。 這確實提供了我想要的背景,但是... SidebarListStyle 中的拖動行為是不同的(不需要的)。 因此,我的問題的替代解決方案可能是“如何修改 SidebarListStyle 上的拖動行為以模仿默認拖動行為”?
我花了很多時間,但我無法想出一個合適的解決方案。 任何人都可以提供一個有效的解決方案嗎?
這有效:)
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 - 如果你已經完全解決了,請告訴我。
我多玩了 RichS 的回答,發現以下內容在我的項目中就足夠了:
extension NSTableView {
open override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()
backgroundColor = .clear
enclosingScrollView?.drawsBackground = false
}
}
YMMV,所以如果您的滾動沒有按預期工作,請查看上面的 RichS 答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.