如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充

2024-04-17

我很难使用 SwiftUI 从 MacOS 中的单元格中删除所有填充。即使在苹果的代码中我似乎也无法做到这一点!

https://developer.apple.com/tutorials/swiftui/creating-a-macos-app https://developer.apple.com/tutorials/swiftui/creating-a-macos-app

例如,里面LandMarkList of the MacLandmarksXcode 中的文件夹,我放了一个.listRowInsets(EdgeInsets())在结束时forEach代码如下所示:

struct LandmarkList: View {
    @EnvironmentObject private var userData: UserData
    @Binding var selectedLandmark: Landmark?
    @Binding var filter: FilterType

    var body: some View {
        List(selection: $selectedLandmark) {
            ForEach(userData.landmarks) { landmark in
                if (!self.userData.showFavoritesOnly || landmark.isFavorite)
                    && (self.filter == .all
                        || self.filter.category == landmark.category
                        || (self.filter.category == .featured && landmark.isFeatured)) {
                    LandmarkRow(landmark: landmark).tag(landmark)
                        .background(Color.red)
                }
            }
            .listRowInsets(EdgeInsets())
        }
    }
}

我还在每个单元格中放置了红色背景颜色。这是我得到的结果:

关键是我似乎无法摆脱这个列表的单元格之间的垂直空间。我见过的所有解决方案似乎都提到了 iOS,但我想在 Mac OS 中执行此操作(它应该具有相同的行为,但事实并非如此)。


这是可能的解决方案的演示(使用 Xcode 11.4 / macOS 10.15.6 进行测试)。

注意:如果需要有多个活动列表(即 NSTableView),并且其中一些应该具有单元格间距(也称为分隔符),那么它们应该由 SwiftUI 工具来完成,因为这种方法会禁用所有可见列表的单元格间距

var body: some View {
    VStack {
        Text("Selected: \(selectedPerson ?? "<none>")")
        List(selection: $selectedPerson) {
             ForEach(persons, id: \.self) { person in
                Text(person)
             }
             .listRowBackground(Color.red)
             .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
        }.border(Color.green)
        .onReceive(NotificationCenter.default.publisher(for: NSView.frameDidChangeNotification)) {
            guard let tableView = $0.object as? NSTableView else { return }
            tableView.intercellSpacing = .zero
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充 的相关文章

随机推荐