現状態・前提・実現したいこと
SwiftUI:tabviewで初期tab1(home)画面のデータが表示できない理由と対応方法が知りたいです。
タブ(下部)切り替えできる下記のソースtab1にこちらのページ
を使いスクロールしてスマートニュースのように上部のタブと画面が切り替わるようにしています。
TabView { tab1() //タブ表示 .tabItem { Image("home") Text("ホーム") } tab2() .tabItem { Image("position") Text("hoge") } //以下省略
発生している問題
tab1画面に表示するデータはfirebaseから引っ張ってきたデータをForeachで回し表示しようとしています。
しかしアプリを立ち上げたり下部のタブをtab1(home)に切り替えるとデータは表示されません。
tab1の中のページで
2ページめに移動しようとタップして横にスクロールしようとしたり(ちょびっと画面を動かす)、スクロールして画面に戻ると表示されます。
2ページ以降のデータは表示されてます。。。。
==============================
「初期画面、tab1選択時にデータが表示されない画像」
==============================
「上部タブ内のページを切り替えようと指を動かしたら表示された時の画像」
果物が一列に横並びになっている部分が1ページ目表示されていなかった部分です。
表示画面のビューとデーター取得のソースは以下になります。
struct ProductListView: View { @ObservedObject var productVM = ProductViewModel() var body: some View { let chunkedProducts = self.productVM.products.chunked(into: 3) ScrollView { VStack { ForEach(0..<chunkedProducts.count) { index in HStack { ForEach(chunkedProducts[index]) { product in ProductCell(product: product) } } } } } } } ーーーー import Foundation import Firebase class ProductViewModel:ObservableObject{ @Published var products:[Product] = [] init() { self.fetchProducts() } func fetchProducts() { PRODUCTS_REF.observeSingleEvent(of: .value) { (snapshot) in guard let allObjects = snapshot.children.allObjects as? [DataSnapshot] else { return } allObjects.forEach { (snapshot) in let productId = snapshot.key Database.fetchProduct(with: productId) { (product) in self.products.append(product) } } } } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/15 13:16
2020/10/16 10:46