SwiftUI MacOS 列表的 Inset 填充

Posted

技术标签:

【中文标题】SwiftUI MacOS 列表的 Inset 填充【英文标题】:SwiftUI MacOS Inset paddings of List 【发布时间】:2020-12-05 18:40:43 【问题描述】:

我在 macOS 应用程序上使用 SwiftUI 有一个滚动列表视图,我试图在可滚动区域内添加填充,但没有成功。这是我的代码:

List(appListItems, id: \.self, selection: $selectedItem)  app in
    ApplistItem(item: app, selected: selectedItem?.hashValue == app.hashValue)

.background(Color.red)
.padding(24)

但我得到的是:

设计需要的是这样,如您所见,我希望滚动条保持在右边缘,并且顶部/底部距离应包含在滚动区域中,而不是放在滚动区域之外。不需要水平填充,但我不知道如何处理顶部和底部填充并将它们保持在滚动区域内

【问题讨论】:

【参考方案1】:

你需要列表行插入,但它是应用于动态内容,所以你需要使用ForEach,比如

List 
   ForEach(appListItems, id: \.self, selection: $selectedItem)  app in
      ApplistItem(item: app, selected: selectedItem?.hashValue == app.hashValue)
   
   .listRowInsets(EdgeInsets(top: 0, leading: 24, bottom: 0, trailing: 24))

.background(Color.red)

【讨论】:

这对我的水平填充很有帮助,但我不知道如何在顶部和底部添加填充并将它们保持在滚动区域“内部” 刚刚通过在循环前后添加 Spacer 解决了垂直填充

以上是关于SwiftUI MacOS 列表的 Inset 填充的主要内容,如果未能解决你的问题,请参考以下文章

macOS 上的 SwiftUI:带有详细视图和多选的列表

带有选择器的 SwiftUI 列表:选择不适用于自定义类型(macOS)

macOS 上的 SwiftUI:如何为 onDelete 启用 UI(从列表中删除)

在 macOS 上的 SwiftUI 列表视图中选择和删除核心数据实体

SwiftUI macOS 双击列表项

SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭