删除列表中的空行 Swift UI Xcode 11
Remove empty rows in List Swift UI Xcode 11
如何使用 Swift UI 删除 List
中的空行 这是我的代码。
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
}
}
}
NavigationView {
...
.listStyle(.grouped)
}
你的情况:
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
.listStyle(.grouped)
}
}
}
据我所知,目前无法从 SwiftUI 中的 List
中删除空单元格。但是,您仍然可以通过根本不使用 List
并手动创建 Divider
来摆脱空单元格(特别是所有那些难看的分隔符)。尝试如下操作:
ScrollView() {
ForEach(elements) { element in
CellView(element: element)
Divider()
}
}
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
.listStyle(GroupedListStyle())
}
}
}
最后我通过添加 listStyle
找到了解决方案。
这帮助我在 MacOS Catalina 10.15.5 Beta 下使用 Xcode 11.4 摆脱了 List
中的空行:
List(flights) { flight in
FlightInfoRow(flightInfo: flight)
}.onAppear{UITableView.appearance().separatorColor = .clear}
如果您想为现有行显示分隔线,您可以在自定义列表行视图中执行此操作。
- 在视图中使用
GeometryReader
单元格的宽度和高度信息。
VStack {
GeometryReader { geometry in
HStack { Text("\(flight.airline)") }
}
}
- 使用
Path{ path in}
在您的内容信息下方画一条水平线,如下所示:
Path{ path in
path.move(to: CGPoint(x: 0, y: geometry.size.height))
path.addLine(to: CGPoint(x: geometry.size.width, y: geometry.size.height))
}.stroke(Color(.lightGray), lineWidth: 0.5)
这将创建类似这样的内容(没有空行和分隔线的列表):
这要归功于 Introspect
我的代码
List() {
...
}
.introspectTableView { tableView in
tableView.separatorColor = UIColor.lightGray.withAlphaComponent(0.4)
tableView.tableFooterView = UIView()
}
如何使用 Swift UI 删除 List
中的空行 这是我的代码。
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
}
}
}
NavigationView {
...
.listStyle(.grouped)
}
你的情况:
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
.listStyle(.grouped)
}
}
}
据我所知,目前无法从 SwiftUI 中的 List
中删除空单元格。但是,您仍然可以通过根本不使用 List
并手动创建 Divider
来摆脱空单元格(特别是所有那些难看的分隔符)。尝试如下操作:
ScrollView() {
ForEach(elements) { element in
CellView(element: element)
Divider()
}
}
struct LandMarkList: View {
var body: some View {
NavigationView {
List(LandMarkListData) { landmark in
LandMarkRow(landmark: landmark)
}
.navigationBarTitle("List")
.listStyle(GroupedListStyle())
}
}
}
最后我通过添加 listStyle
找到了解决方案。
这帮助我在 MacOS Catalina 10.15.5 Beta 下使用 Xcode 11.4 摆脱了 List
中的空行:
List(flights) { flight in
FlightInfoRow(flightInfo: flight)
}.onAppear{UITableView.appearance().separatorColor = .clear}
如果您想为现有行显示分隔线,您可以在自定义列表行视图中执行此操作。
- 在视图中使用
GeometryReader
单元格的宽度和高度信息。
VStack {
GeometryReader { geometry in
HStack { Text("\(flight.airline)") }
}
}
- 使用
Path{ path in}
在您的内容信息下方画一条水平线,如下所示:
Path{ path in
path.move(to: CGPoint(x: 0, y: geometry.size.height))
path.addLine(to: CGPoint(x: geometry.size.width, y: geometry.size.height))
}.stroke(Color(.lightGray), lineWidth: 0.5)
这将创建类似这样的内容(没有空行和分隔线的列表):
这要归功于 Introspect
我的代码
List() {
...
}
.introspectTableView { tableView in
tableView.separatorColor = UIColor.lightGray.withAlphaComponent(0.4)
tableView.tableFooterView = UIView()
}