簡體   English   中英

macOS 上的 SwiftUI 列表樣式

[英]SwiftUI ListStyle on macOS

在 macOS 上,使用 SwiftUI,關於 List:

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

使用視圖調試器,我看到列表中有一個 ListCoresScrollView,內部有一個_NSScrollViewContentBackgroundView和一個 NSVisualEffectView。 該視圖默認為白色背景。 我想改變那個特定的視圖(例如變得透明),因為它似乎是一個內部視圖。

如何修改列表上的背景視圖(在 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 - 如果你已經完全解決了,請告訴我。

我多玩了 RichS 的回答,發現以下內容在我的項目中就足夠了:

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

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

YMMV,所以如果您的滾動沒有按預期工作,請查看上面的 RichS 答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM