ios 如何隐藏SwiftUI列表视图的列表行分隔符,仅显示第一个和最后一个项目?

nukf8bse  于 2022-12-24  发布在  iOS
关注(0)|答案(1)|浏览(150)

可以编写多个内联三元语句,但是有没有更干净的方法?

btqmn9zl

btqmn9zl1#

具有以下功能:

extension View {
    @ViewBuilder
    fileprivate func hideListRowSeparatorIfFirstOrLastItem<Data: RandomAccessCollection<ID>, ID: Identifiable>(data: Data, item: ID) -> some View {
        if data.first?.id == item.id {
            listRowSeparator(.hidden, edges: .top)
        } else if data.last?.id == item.id {
            listRowSeparator(.hidden, edges: .bottom)
        } else {
            self
        }
    }
}

您可以巧妙地将此属性添加到行中:

struct MyView: View {
    let model = Model()
    var body: some View {
        List {
            Section("Section") {
                ForEach(model.items) { item in
                    Text("Hello \(item.value)")
                        .hideListRowSeparatorIfFirstOrLastItem(data: model.items, item: item)
                }
            }
        }
        .listStyle(.plain)
    }
}

相关问题