1. 隐藏/取消List的分割线
iOS 13.0+ (全局效果)
List (0..<50) { index in
Text("\(index)")
}
.onAppear {
UITableView.appearance().separatorStyle = .none
}
iOS 14.0+
List (0..<50) { index in
Text("\(index)")
}
.listStyle(SidebarListStyle())
iOS 15.0+
func listRowSeparator(_ visibility: Visibility, edges: VerticalEdge.Set = .all) -> some View
其调用方式为
List (0..<50) { index in
Text("\(index)")
.listRowSeparator(.hidden)
}
2. 设置左滑删除Cell
struct ListViewDemo: View {
//数据数组
@State private var streets = [Street(name: "The Lodon Street"), Street(name: "The Joe's Street"), Street(name: "The House Street")]
var body: some View {
func deleteRow(at offsets:IndexSet) {
streets.remove(atOffsets:offsets)
}
return List{
ForEach(streets, id: \.self) { street in
StreetRow(street: street)
}.onDelete(perform: deleteRow)
}
}
}
3. List添加section分组以及设置grouped类型
struct ListViewDemo: View {
var body: some View {
return List{
Section(header:Text("some streets one"), footer: Text("Fotter1")){
TaskRow()
TaskRow()
TaskRow()
}
Section(header:Text("some streets two"), footer: Text("Fotter2")){
TaskRow()
TaskRow()
TaskRow()
}
}
}
}
struct TaskRow: View {
var body: some View {
Text("Task data goes here")
}
}
在UITableView中我们可以设置plain和grouped两种样式,而默认是plain样式,SwiftUI也一样。在swiftUI中设置grouped样式很简单,只需要为list添加相应的listStyle modifier:
struct ListViewDemo: View {
var body: some View {
return List{
Section(header:Text("some streets one"), footer: Text("Fotter1")){
TaskRow()
TaskRow()
TaskRow()
}
Section(header:Text("some streets two"), footer: Text("Fotter2")){
TaskRow()
TaskRow()
TaskRow()
}
}.listStyle(GroupedListStyle())
}
}
4. 点击Cell跳转的实现
struct ListViewDemo: View {
var body: some View {
let streets = [
Street(name: "The Lodon Street"),
Street(name: "The Joe's Street"),
Street(name: "The House Street")
]
return NavigationView{
List(streets){ street in
NavigationLink(destination:ListViewDetial()){
StreetRow(street: street)
}
}.navigationBarTitle("Streets")
}
}
}
5. 去除Cell右边自带的箭头
NavigationLink会自动为List的Cell添加一个箭头,要想去掉箭头将Cell 放在NavigationLink的外边即可
struct ListViewDemo: View {
var body: some View {
let streets = [
Street(name: "The Lodon Street"),
Street(name: "The Joe's Street"),
Street(name: "The House Street")
]
return NavigationView{
List(streets){ street in
ZStack{
NavigationLink(destination:ListViewDetial()){
EmptyView()
}
StreetRow(street: street)
}
}.navigationBarTitle("Streets")
}
}
}
6.直接依赖Row的显示设定
struct PrecentList: View {
@State var list:[Int] = []
var body: some View {
List(list,id:\.self){ i in
Image(systemName: "heart.fill").foregroundColor(.red).font(.headline)
Text("完成度:")
Text("\(i)")
.bold()
.foregroundColor(.white).padding(.all,5)
.frame(width:(250 * CGFloat(i) / 100) + 40,alignment: .trailing)
.background(RoundedRectangle(cornerRadius: 10).fill(Color.blue))
}
.onAppear{
_ = (0...30).map{ _ in
self.list.append(Int.random(in: 0...50))
}
}
}
}

7.设置单个Row的背景
.listRowBackground(Color.red)
struct ColorList:View{
var colors:[Color] = [.red,.yellow,.blue,.green,.pink,.orange]
var body:some View{
List{
ForEach(0..<20) { i in
Text("ID:\(i)").listRowBackground(self.colors[i % self.colors.count])
}
}
}
}

8.设置Row的边界缩进
.listRowInsets(EdgeInsets(top: 0, leading: 50, bottom: 0, trailing: 0))
struct InsetsList:View{
var body:some View{
List{
Text("贝多芬").foregroundColor(.white)
.listRowBackground(Color.green)
Text("第五钢琴协奏曲").foregroundColor(.blue)
.listRowInsets(.init(top: 0, leading: 40, bottom: 0, trailing: 0))
Text("英雄").foregroundColor(.blue)
.listRowInsets(.init(top: 0, leading: 40, bottom: 0, trailing: 0))
Text("命运").foregroundColor(.blue)
.listRowInsets(.init(top: 0, leading: 40, bottom: 0, trailing: 0))
Text("莫扎特").foregroundColor(.white)
.listRowBackground(Color.green)
Text("唐璜").foregroundColor(.blue)
.listRowInsets(.init(top: 0, leading: 40, bottom: 0, trailing: 0))
Text("费加罗的婚礼").foregroundColor(.blue)
.listRowInsets(.init(top: 0, leading: 40, bottom: 0, trailing: 0))
}
}
}
