ScrollView+Button をNavigationStackで使った時に発生する場合があったので、忘れないようにメモ、他発生したパターンの記録をしておく。今後また発生した時のための確認用
Update NavigationAuthority bound path tried to update multiple times per frame.ってなんなん?
ナビゲーションパスが一つの描画フレーム内で複数回の更新が発生した時に表示される。
基本的に、SwiftUIのNavigationStackやNavigationLinkなどのナビゲーション機能を使っているときに発生するんだけど、色々調べたところ、状態変数が変更した時に出るとも限らんらしい。
今回も状態変数の変化は見られないのに、このエラーが発生している
今回発生したコード
今回遭遇したのは、以下のようなコード。
NavigationStackとTableも使ってる
TabView(selection:$TabSelector){
NavigationStack(path:$routepath){
ScrollView{
Button(action:{print("unko")}){Text("unko")}
}
}
これ、routepathは、StateObjectで監視してるものなんだけど、これを@Stateでローカル変数にすると、エラーは発生しない。色々複雑な条件で発生するものっぽい。
で、以下に変更しても問題は発生しない
TabView(selection:$TabSelector){
NavigationStack(path:$routepath){
ScrollView{
Text("unko")
}
}
Buttonが原因なのでは…と思っているけども…
Buttonを使わず、TextによるカスタムButtonで対応することに
onTapGestureを使って、Buttonを使わないようにしたら、回避できたのでいったんこれで対応することに。
というか、Buttonは二度と使わないで生きていこうかと思った
TabView(selection:$TabSelector){
NavigationStack(path:$routeNavigationPath_beta.searchpath){
ScrollView{
Text("unko")
.padding()
.background(Color.blue)
.cornerRadius(5)
.onTapGesture {
print("unkoburiburi")
}
}
}
Textを使ってButtonと同じようなものは作れるのだから、それでなんとか。。。
他、発生して対応したパターンリスト
アニメーションで発生
監視してる値が状態変数だった場合に、数回変異が発生することになり、エラーが出ていた
NavigationStackが重なっていた
オリジナルのmodifierを作成し、中にNavigationStackが入っていたのだが、
そのmodifierを使いつつ、別途NavigationStackを適用していて発生