🐥

iOS17.5+TabView+NavigationLink+SectionHeader+SwiftDataの組み合わせでバグ?

2024/10/22に公開

現象

AからBへ移行してもBを表示しない。
Bのbodyがずっと走り続ける(何度も走る)。

コード

import SwiftUI
import SwiftData

@Model
class Word {
    @Attribute(.unique)
    var id = UUID().uuidString
    
    init() {}
}

struct ContentView: View {
    var body: some View {
        TabView {
            A()
        }
    }
}

struct A: View {
    var body: some View {
        NavigationStack {
            NavigationLink(destination: B()) {
                Text(verbatim: "B")
            }
        }
    }
}

struct B: View {
    
    @Query(filter: #Predicate<Word> { $0.id == "abc" }) var wordsABC: [Word]

    var body: some View {
        List {
            Section {
                Text("Content")
            } header: {
                Text("Header")
            }
        }
    }
}

起きる条件

  • iOS17.5
  • TabView
  • NavigationStack + NavigationLink
  • SwiftData + Query + filter
  • List + Section + header

の組み合わせ

回避方法

回避が確認できたものは

  • iOS18にする
  • TabViewではなく直接Aを貼る
  • filterを使わない
  • headerを使わない
  • AでQueryを作ってBに渡す

どれかひとつで回避できた

Discussion