2019/09/28日のSwiftUI1の現状で、SwiftUIのList separatorをインスタンス単位で公式に消して使う方法がなく、無理やりな方法を使うか、回避策を取る必要があります。
この記事では、上記の2つの方法について共有します。
1. 無理やり解決する
出典不明ですが、SwiftUIのListも UITableView.appearance()
の制御下にあるようなので、この挙動を切り替えます。
Viewの表示/非表示で切り替えても良いですし、場合によってはUIApplicationDelegateで切り替えても良いかもしれません。
struct ContentView: View {
var body: some View {
NavigationView {
List(accounts) { account in
YourView()
}
}
.onAppear {
// SwiftUIの初期バージョンでは、Listに対してSeparatorを取り外す処理ができないので、この特殊なコードで無理やり消す。必要になったら別途考える。
UITableView.appearance().separatorColor = .clear
}
.onDisappear {
// Viewが画面を離れるときに元に戻す
UITableView.appearance().separatorColor = .separator
}
}
}
2. ScrollViewを使う
こちらもStackoverflowだとこの辺に書いてあるのと、Twitterでも先駆者が何人か検証されていました。
ScrollView {
VStack(alignment: .leading) {
ForEach(accounts) { account in
DailyCaloriesSummaryView()
}
}
}
どっち使ったら良い?
超暫定対応になるので、自分が期待する挙動を楽に実現できる方で進めれば良いかと思います。// FIXME: を残しておいて、正式対応されたらすぐに対応しても良いぐらいのやつ。