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的主要内容,如果未能解决你的问题,请参考以下文章
Objective C UIButton with divider并在选中时更改textcolor