在Swift/OC自定义分割线(Separator line)是组织TableView必不可少的一步,到了SwiftUI 使用List时,却没有找到相关的Modifier来控制或自定义分割线,从墙外的世界看回来,目前大致有两种解决方案。
1.iOS 13
此方法目前亲测仅支持iOS14以下,iOS14已经不起作用,根据的是:SwiftUI本质是封装已经健全且强大的TableView,所以对于TableView的操作还是可以愉快运行。
struct WidgetDetail: View {
init() {
UITableView.appearance().separatorColor = .clear
UITableView.appearance().separatorStyle = .none
}
var body: some View {
List {
...
}
}
}
在iOS 13下,在 init{} 内的两个方法都可以实现隐藏分割线,在iOS14中已经失效。
由此还能做一下拓展,比如我在实现类似系统应用中常见的带有圆角的Cell时用到的ListStyle: InsetGroupedListStyle() ,将一个Cell作为section时,会发现默认的Section Height与预想的高度差的有点多,那我就可以使用上面的方法来设置Section Height:
...
init() {
UITableView.appearance().sectionHeaderHeight = 0
}
...
但这样还是有问题,在将Section Header设置为0之后,List的所有Section同时响应,无法显示其他有显示Title需求的Section Header,所以在WWDC2020后,Apple提供了新的 Api -- LazyVStack,这就是另外一种解决方案。
2.iOS 14
直接使用ScrollView + LazyVStack,LazyVStack不会将所有的Cell同时渲染,在保证了性能的同时,也能高度自定义List内容,关于LazyVStack,之后再记。
网友评论