如何在macos下的swiftui上降低侧边栏样式列表的行高?

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

我想用以下代码减小列表的行高:

List(elements, id: \.id, children: \.children, selection: $selected) { element in
    HStack {
        Image(systemName: element.children != nil ? "folder" : "list.bullet.rectangle.portrait")
        Text(element.name)
    }
    .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
    .listRowSeparator(.hidden, edges: .all)
    .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
}
.environment(\.defaultMinListRowHeight, 20)
.listStyle(.inset)

用户界面如下所示:

enter image description here

但我希望背景模糊。当我将

.listStyle(.inset)
更改为
.listStyle(.sidebar)
后,行高增加了。

enter image description here

无论我如何降低列表元素的填充或插入,行高都不会减少。我发现XCode已经做到了。

enter image description here

但是我找不到方法。

环境:

  • macOS 15.2
  • XCode 16.2
macos swiftui swiftui-list
1个回答
0
投票

SwiftUI 列表样式的某些部分无法自定义。我建议继续使用

.inset
样式,并手动添加
NSVisualEffectView
作为背景。

struct BackgroundBlur : NSViewRepresentable {
    func makeNSView(context: Context) -> NSVisualEffectView {
        let view = NSVisualEffectView()
        view.state = .active
        return view
    }
    func updateNSView(_ view: NSVisualEffectView, context: Context) { }
}
.listStyle(.inset)
.scrollContentBackground(.hidden) // remember to hide the default background or else our own background will not be visible
.background {
    BackgroundBlur().ignoresSafeArea()
}
© www.soinside.com 2019 - 2024. All rights reserved.