SwiftUI List with Divider 但在 MacOS 中没有额外的 Insets

Posted

技术标签:

【中文标题】SwiftUI List with Divider 但在 MacOS 中没有额外的 Insets【英文标题】:SwiftUI List with Divider but no extra Insets in MacOS 【发布时间】:2021-01-31 11:12:27 【问题描述】:

在 MacOS 上的 SwiftUI 列表中,我希望有分隔线,但行之间没有额外的间距。 以下示例生成两个这样的列表:

我想要的是:

第二个列表中的分隔线具有“原始”总高度,没有额外的间距。

这是我试过的代码:

struct TestViews_MacOS: View 
  @State var selectedLine: String?

  var body: some View 
    VStack
      List(selection: $selectedLine) 
        TestLineWithSeperator(text: "Line 1")
        TestLineWithSeperator(text: "Line 2")
        TestLineWithSeperator(text: "Line 3")
        TestLineWithSeperator(text: "Line 4")
      
      Text("==========================")
      List(selection: $selectedLine) 
        TestLineWithOutSeparator(text: "Line 1")
        TestLineWithOutSeparator(text: "Line 2")
        TestLineWithOutSeparator(text: "Line 3")
        TestLineWithOutSeparator(text: "Line 4")
      
//      .onReceive(NotificationCenter.default.publisher(for: NSView.frameDidChangeNotification)) 
//        guard let tableView = $0.object as? NSTableView else  return 
//        print("set inte to 0")
//        tableView.intercellSpacing = .zero
//    
      //.listStyle(DefaultListStyle())
      //.listStyle(InsetListStyle())
      //.listStyle(PlainListStyle())
      //.listStyle(SidebarListStyle())
      //.listRowInsets(.none)
      Spacer()
      HStack
        Text("\(selectedLine ?? "nothing Selected")").padding()
        Spacer()
      
    
  


struct TestLineWithSeperator: View 
  var text: String

  var body: some View 
    VStack 
      HStack
      Text(text)
//    .padding(.top, -4)
//    .padding(.bottom, -4)
//    .listRowInsets(.none)
//    .border(Color.green)
        Spacer()
      .padding(0)
      Divider()
    
    .padding(0)
    .tag("x \(text)")
  

【问题讨论】:

【参考方案1】:

分隔符实际上并没有导致额外的填充。 VStack 默认带有一些间距,这导致该行看起来像是有额外的填充。

VStack(spacing: 0) 
    Text("Hello World!")
    Divider()

这样做应该将分隔线直接向上移动到文本下方,而不需要额外的填充。

【讨论】:

以上是关于SwiftUI List with Divider 但在 MacOS 中没有额外的 Insets的主要内容,如果未能解决你的问题,请参考以下文章

在列表行中制作等宽的 SwiftUI 视图

Objective C UIButton with divider并在选中时更改textcolor

SwiftUI - 使列表分隔线扩展到触摸屏边缘

如何根据flex-layout获取md-divider

有没有办法为 SwiftUI 菜单使用 .displayInline 选项?

SwiftUI 在自定义 TextField 上切换活动/非活动线条颜色